1

私は一般的な方程式を持っています

t=tr+(ts-tr)/(1+(a*h)^n)^(1-1/n)

(h=0, 1, 2, 3) の場合、t=2.000、1.6300、1.2311、1.1084 です。したがって、4 つの未知数 tr、ts、a、n を含む 4 つの方程式があります。

matlabで「解決」機能を使用しました

s=solve('tr+(ts-tr)/(1+(a*0)^n)^(1-1/n)=2','tr+(ts-tr)/(1+(a*1)^n)^(1-1/n)=1.63','tr+(ts-tr)/(1+(a*2)^n)^(1-1/n)=1.2311','tr+(ts-tr)/(1+(a*3)^n)^(1-1/n)=1.1084')

エラーは

??? エラー使用 ==> mupadmex MuPAD コマンドのエラー: Singularity [ln];

'numeric::fsolve' の評価中

エラー ==> sym.sym>sym.mupadmexnout 2018 out = mupadmex(fcn,args{:});

エラー ==> 76 で解決 [symvars,R] = mupadmexnout('symobj::solvefull',eqns,vars);

私は何をすべきか?

4

1 に答える 1

0

この機能を使用すると問題が発生しますsolve。これは単純な方程式でのみ機能しfsolveます。関数を使用することをお勧めします。私はあなたのために課題をやっているのではないかと心配しているので、fsolve.

解決したいとします。

 1 = x_1
 1 = x_1 + x_2
-1 = x_1 + x_2 + x_3
-1 = x_1 + x_2 + x_3 + x_4

次に、最初に行う必要があるのは、これらを方程式が0に等しいと書くことです

 0 = x_1 - 1
 0 = x_1 + x_2 - 1
 0 = x_1 + x_2 + x_3 + 1
 0 = x_1 + x_2 + x_3 + x_4 + 1

次に、ベクトルを受け取る関数を作成する必要があります。xの成分は、、およびxを表します。関数の出力もベクトルになり、その成分は上記の方程式の右辺の出力になります (以下の関数を参照)。この関数は、正しいと推測するまで、 の正しい値の推測を提供するためにによって呼び出されます。実際にこの関数を自分で実行しない場合。それがトップ関数の下にある理由です。x_1x_2x_3x_4funfSolvex

次に、この関数への関数ハンドルを作成しますfHandle = @funfHandleの別名で考えると、これfunを計算するときは を計算するfHandle([1; 2; 3; 4])のと同じfun([1; 2; 3; 4])です。この後、正しいベクトルの最初の推定を行います。xたとえば、 を選択したとしxGuess = [1; 1; 1; 1]ます。最後に、fHandle と xGuess を に渡しfSolveます。

ここにコードがあります

function Solve4Eq4Unknown()
fHandle = @fun;
xGuess = ones(4,1);
xSolution = fsolve(fHandle, xGuess)
end

function y = fun(x)
y = zeros(4,1); % This step is not necessary, but it is effecient
y(1) = x(1) - 1;
y(2) = x(1) + x(2) - 1;
y(3) = x(1) + x(2) + x(3) + 1;
y(4) = x(1) + x(2) + x(3) + x(4) + 1;
end
于 2013-12-02T03:34:03.677 に答える