【问题标题】:how a function change in a loop with newtonsys command matlab使用 newtonsys 命令 matlab 如何在循环中更改函数
【发布时间】:2011-04-23 18:13:48
【问题描述】:

我想在 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) 我猜这是因为函数句柄的错误使用,对于我的函数,我必须使用另一个命令,或者我必须使用另一种方法来求解 2nonlinear equation。

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-10
      • 2012-04-04
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多