1

方程式 がf(x)=exp(x)+3x^2あり、固定小数点反復法を使用してその方程式を解くために使用します。これが私のf(x)=0コードx=?ですscilab

function fixed_point(fung,x0,err)
x=zeros(100);
ea = 100;
i = 1;
x(i)=x0;
printf(" \t i \t x(i) \t       ea(%%)");
printf("\n\t %d \t %f \t %f", i, x(i), abs(ea));
while (abs(ea) >err) do
    i=i+1;
    z =x(i-1);
    x(i) = evstr(fung)+z;
    ea =100*(x(i)-x(i-1))/x(i);
    printf("\n\t %d \t %f \t %f", i, x(i), abs(ea));
end

printf("\n Akar = %f", x(i));
endfunction

次に、次を使用して呼び出します。

fixed_point ('exp(z)-(3 .* z .*z)',0.00000000001,0.5)

私はx(i)=infついに得ましたが、それは答えではないと思います.誰かが私のコードの何が問題なのか説明してもらえますか?

4

1 に答える 1

1

答えを「副問題」に分けましょう。

  1. 一般に、解決策がわからない場合は、数値的方法を使用しないでください。ダニエルが示したように、この方程式には実数の解がありません。妥当な x0 がある場合は、まずその近傍をプロットしてください!

  2. 一般的に、あなたの目標は方程式を解くことですか、それともその方法を実装することですか? Matlab にはfsolve関数などがあります (また、scilab だけでなく matlab タグも追加しました)。または、独自の関数を設計する場合は、これらの簡単に微分可能な関数 (sin、exp、x^n... )。

  3. 特に: 解が収束しない場合に while ループをエスケープできるように、コードに何かを追加します。あなたの出力よりも「DOESN'T CONVERGE」である必要があります。これは、神秘的なものよりも間違いなく優れてinfいます(たとえば、ループを壊すif i>1e3など)。

于 2015-02-27T13:26:22.440 に答える