【问题标题】:Finding the root of an equation using iteration使用迭代查找方程的根
【发布时间】:2018-10-27 14:03:30
【问题描述】:

我正在尝试使用迭代找到方程 3x3+x2-10 的根。这是我到目前为止的代码,但是我认为我没有正确实现 while 循环,因为它目前只评估了一次方程。本质上,代码应该评估xVal-cVal 的绝对值是否小于0.0001,如果是,它应该打印出cVal 的值并停止。否则,xVal 的值应设置为等于cVal 并循环返回,但代码不会这样做。

xVal = input('Enter a value for x:');
cVal =((10-xVal^2)/3)^(1/3);
while (abs(xVal-cVal)>0.0001)
   xVal = cVal;
end
disp(cVal);

【问题讨论】:

  • 在将旧值分配给xVal 后,您需要在循环内评估新的cVal。如果 Matlab 有一个 do-while 或 do-until,那将是理想的构造。
  • 所以 while (abs(xVal-cVal)>0.0001) xVal = cVal; cVal = 0;结束
  • 不,0 不是 cVal 的正确新值。想一想,不要只是猜测。这只会无限循环并测试值 0。它需要按照第一次完成的方式计算。
  • 要实现该流程图,您需要重新计算cVal。但我不确定它是否一定会收敛。这是你的算法还是你从某个地方得到的?
  • 我将确认,如果正确实施,这个定点迭代会收敛(即,cValwhile 循环内更新。

标签: matlab loops iteration equation-solving


【解决方案1】:

提供的流程图图像中的方法不起作用。

试试这个脚本:

func = @(xVal)((10-xVal^2)/3)^(1/3);
x = fzero(func,StratingX)

【讨论】:

  • 流程图中的方法将起作用。这是一个简单的定点迭代。
【解决方案2】:

您需要在 while 循环中更新 cVal

xVal = input('Enter a value for x:');
cVal =((10-xVal^2)/3)^(1/3);
while (abs(xVal-cVal)>0.0001)
   xVal = cVal;
   cVal =((10-xVal^2)/3)^(1/3);
end 
disp(cVal);

输出:

Enter a value for x:0
    1.3905

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2018-09-30
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多