matlab fsolve函数应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab fsolve函数应用相关的知识,希望对你有一定的参考价值。

我想求出L1*cos(q1)+L2*cos(q2)+L3*cos(q3)=X,L1*sin(q1)+L2*sin(q2)+L3*sin(q3)=Y中q2,q3的解其它的都是已知的,请问matlab的程序应该怎么写?

1、matlab是一个功能强大的软件,不仅仅在数据处理方面很优秀,在界面编程方面同样优秀,这里简单介绍下matlab界面编程的基础步骤。

2、在打开的matlab程序中,点击new---graphic user interface,打开创建gui向导--我们选择blank gui,创建空白的gui界面---选择左侧我们需要的控件,如下图,我们选择一个button---将控件拖入到gui界面的合适的位置,双击打开设置属性的界面---设计好界面后,我们先不要编写函数内容,先运行界面---他会提醒我们激活界面将保存界面和代码,我们选择yes---输入文件名,点击保存---我们回到界面编辑界面,点击button右键打开右键菜单,点击view callbacks---callback,来跳转到该控件的回调函数---我们在该函数中输入代码---这时,我们运行程序,点击按钮,即可以在命令窗口中看到button执行的效果。

3、先运行界面,使得matlab给我们创建界面的代码,然后在view callback。

参考技术A

     建立方程组的M-函数文件(fun.m)

    function eq=fun(x, q1)

      eq(1)=L1*cos(q1)+L2*cos(x(1))+L3*cos(x(2))-X;
      eq(2)=L1*sin(q1)+L2*sin(x(1))+L3*sin(x(2))-Y;
      eq = eq(:);

2. 运行主脚本:

q1 = 0; % q1赋值

ff = @(x)fun(x, q1);

y=fsolve(ff, [0.5,0.5])     %[0.5,0.5]是迭代初值

追问

不好意思,我忘了代入数值了,我先试下!!谢谢你的帮助!!

追答

你得在fun.m里把L1啥的都定义上。

追问

L1=0.036
L2=0.060
L3=0.170
X=-0.01
Y=0.165
q1=45
你能不能试运行下,我这边还是有些问题。。

参考技术B 这个需要用到matlab的符号运算了,先将q2、q3设为符号量(syms q2,q3;),然后将上面两个式子(eq1,eq2)列出来,之后slove(eq1,eq2)就行了!

fsolve即使给定解决方案也无法找到解决方案

我通过这个简单的代码重现了我遇到的问题。

为了验证fsolve正在使用下面的函数,我使用下面的t值预先计算了函数值,这样我确信t1到t4是一个解决方案。

但即使给出解决方案点,fsolve总是返回相同的解决方案[1.50000000e + 02 7.00000000e-01 2.00000000e + 02 1.00000000e-01]

我做错了什么?有没有办法在解决方案上设置约束,例如所有t变量都在0到1000之间?

t1 = 150.0
t2 = 0.7
t3 = 200.00 
t4 = 0.1 

def FS(z):
    x1=z[0]
    x2=z[1]
    x3=z[2]
    x4=z[3]

    f = np.zeros(4)
    f[0] = x1*x2 + x3*x4 - 125.0
    f[1] = (x1**2/500)*x2 + (x3**2/500)*x4 - 39.5
    f[2] = (x1**3/500**2)*x2 + (x3**3/500**2)*x4 - 12.649999999999999
    f[3] = (x1**4/500**3)*x2 + (x3**4/500**3)*x4 - 4.115
    return f

res = fsolve(FS, [t1, t2, t3, t3])
print(res)

[1.50000000e + 02 7.00000000e-01 2.00000000e + 02 1.00000000e-01]

答案

首先,我没有看到你的问题。该算法按预期收敛(一个)解决方案。当您在起始值中偏离解决方案时,甚至会发生这种情况,例如

t1 = 10
t2 = 10
t3 = 190
t4 = 10

这引起了解决方案[150, 0.7, 200, 0.1]。但部分问题可能是您有多个解决方案。试试吧

 t1 = 190
 t2 = 10
 t3 = 10
 t4 = 10

如果[t1, t2, t3, t4]是一个解决方案,那么[t3, t4, t1, t2]也是一个解决方案。这可能使得算法对于像[1, 1, 1, 1]这样的某些起始值不收敛。 See some discussion about the underlying algorithm for instance here

以上是关于matlab fsolve函数应用的主要内容,如果未能解决你的问题,请参考以下文章

请教,Matlab的fsolve函数怎么用

matlab关于fsolve函数

怎样使MATLAB的fsolve函数不输出提示信息?

MATLAB fsolve函数调用

matlab function定义函数,并且用fsolve求解这个函数。代码如下:

matlab中fsolve解二元方程问题