完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在研究weibull分布的参数估计,其中有一个环节为matlab编程利用最大似然函数求解估计参数,在此就不可避免的要面临求解非线性方程。
本人在网上搜索多个文献,其中被大家引用最多的一个例子就是"matlab实现牛顿迭代法求解非线性方程"。通过试着运行作者的matlab code,产生了如下一些疑问,请各位老师帮忙解答,不胜感谢。 clear clc syms x1 x2 x3 % 定义三个未知数 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06; f3=exp(-x1*x2)+20*x3+(10*pi-3)/3; % 三个方程组成一个方程组并且f1=0;f2=0;f3=0 f=[f1 f2 f3]; df=[diff(f,x1);diff(f,x2);diff(f,x3)]; % 分别对x1 x2 x3 三个未知数求偏导 x0=[0.1 0.1 -0.1]; eps=0.00001; N=20; % 设置初始值 x1 x2 x3 的初始值分别为0.1 0.1 -0.1,精确度0.00001 迭代运算次数设置为最多20次 % 求解 for i=1:N; % 运算次数 f=subs(f,{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); % 为subs函数的赋值运算 1x3的矩阵 df=subs(df,{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});% 为subs函数的赋值运算 3x3的矩阵 x=x0-f/df; % 得到的一组新数值 1x3的矩阵 理解为 新的x0=[新x0(1) 新x0(2) 新x0(3)] if norm(x-x0) end % 条件判断 得出的新值是否满足精确度的要求 可以求x矩阵元素平方和的开根 x0=x;% 当条件满足 输出求得的x0 end 运行上述程式出现的问题如下 当第一次循环初始值为x0=[0.1 0.1 -0.1]代入,得到第一次循环的计算结果 f/df得到一个结果 进而x得到一个结果 但是当第二次循环 f/df的值就已经保持不变 仅有x和x0在循环计算 当然这不是我们想要 请各位老师指点 PS 有没有更好的迭代的在matlab里的实现方法可以更好的缩短结算时间? |
|
相关推荐
2 个讨论
|
|
似然函数L 取ln 其实得到的是 lnL 即lanbda 对未知参数求偏导数 分别令偏导数值等于0 可解出参数估计值 而且相比最小二乘法要好 即所谓的maximum我就是按照这个思想 得到了一个非线性方程组 现在matlab程式的目的在于用牛顿迭代法求解 这里我出现了问题 |
|
|
|
|
|
请问simulink的s-function模块如何添加多输入输出接口
1633 浏览 2 评论
1352 浏览 3 评论
使用simulink进行三相短路故障分析时,各参数应该如何设置
1920 浏览 1 评论
想请教一下图中是simulink的什么模块,需要这种三段斜率函数模块但没找到在哪
1993 浏览 1 评论
2906 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-9 16:44 , Processed in 0.641103 second(s), Total 54, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号