如何使用newtonsys命令matlab在循环中更改函数

时间:2011-04-23 18:13:48

标签: matlab

我想在matlab中的for循环中的每一步更改函数变量。 我采取这些步骤: 我创建了我的mfile函数

function [jfun,fun]=air(x,vt,ty,tz,p2,y0)

    jfun=[(cos(tz)*cos(ty)*vt/9.81)*(1-exp(-9.81*x(2)/vt)),...
          x(1)*cos(tz)*cos(ty)*exp(-9.81*x(1)/vt);
          (-vt*sin(tz)*cos(ty)/9.81)*exp(-9.81*x(1)/vt),...
          (x(1)*sin(tz)*cos(ty)*+vt)*exp(-9.81*x(1)/vt)];
    fun=[(x(1)*cos(ty)*cos(tz)*vt/9.81)*(1-exp(-9.81*x(2)/vt))-p2;...
        (vt/9.81)*(x(1)*sin(tz)*cos(ty)+vt)*(1-exp(-9.81*x(2)/vt))-vt*x(2)+y0];
end

然后我使用了newtonSys命令:

ty=rad(-23)
tz=rad(15)
p2=1.8
vt=8.4925
y0=0.2
myfun=@(x)air(x,vt,ty,tz,p2,y0)
x=newtonSys(myfun,[15 5],0.000001,0.000001,500,1)

和matlab回答: ==>中的错误Untitled18 at 7 x = newtonSys(myfun,[15 5],0.000001,0.000001,500,1) 我猜它是因为错误使用了函数句柄而对于我的函数我必须使用另一个命令,或者我必须使用另一种方法来解决2非线性方程。

1 个答案:

答案 0 :(得分:1)

首先,您没有显示整个错误。 MATLAB应该告诉你实际的错误是什么,所以除非你告诉我们,否则我们不会知道什么是错的。

其次,我在系统或在线MATLAB文档中没有看到newtonSys。所以很可能是外部程序,这里的大多数人可能都不熟悉。我从快速谷歌搜索中找到的最接近的是this,这是牛顿方法的一种实现方法,用于近似非线性n-方程组的根。你使用的是同一个文件吗?如果是这样,如果您查看注释,它表示您需要将该函数作为字符串传递。因此,您必须将myfun作为'myfun'传递。

如果没有,您可以编辑您的问题并添加您正在使用的功能的内容吗?没有这些,几乎不可能回答你的问题。