24小时热门版块排行榜    

查看: 700  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

夜的宁静

金虫 (小有名气)

[求助] matlab牛顿迭代的问题,出现Matrix dimensions must agre的错误 已有1人参与

在用用牛顿迭代求2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x)=0中的x 初值是0.03
function [x,fval]=newton()
clc;
syms x;
f=@(x)2*log10(5.4*10^-4+2.51*10^-5/sqrt(x))+1/sqrt(x);
df=@(x)diff(2*log10(5.4*10^-4+2.51*10^-5/sqrt(x))+1/sqrt(x));
t=1e-5;
x0=0.03;
x=x0+2*t;
k=0;
while abs(x-x0)>t
k=k+1;
x=x0;
x=x0-feval(f,x0)/feval(df,x0);%这句话有错,提示Matrix dimensions must agree.
end
if k==500
    disp('迭代次数过多,防止死循环终止');
else
    fprintf('迭代到%d次时得到结果%f\n',k,x)
end

matlab牛顿迭代的问题,出现Matrix dimensions must agre的错误
360反馈意见截图16570207506364.png
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

Tomakeeverydayccount.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

夜的宁静

金虫 (小有名气)

引用回帖:
2楼: Originally posted by 材料廖 at 2015-05-18 11:45:01
1.你的x0没有更新
2.报的错,调试时候发现feval(df,x0)是空矩阵

还是不知道怎么改,我是初学,因为用到现学的,所以基础不怎么样。x0没有更新什么意思
之前的赋值可能有些错误,改成这样还是不行,麻烦再看一下,十分感谢function [x,fval]=newton()
clc;
syms x;
f=@(x)2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x);
df=@(x)diff(2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x));
t=1e-5;
x=0.03;
x0=x+2*t;
k=0;
while abs(x-x0)>t
k=k+1;
x0=x;
x=x0-feval(f,x0)/feval(df,x0);%这句话有错,但不知道错在哪里
end
if k==500
    disp('迭代次数过多,防止死循环终止');
else
    fprintf('迭代到%d次时得到结果%f\n',k,x)
end
Tomakeeverydayccount.
3楼2015-05-18 22:23:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

材料廖

木虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
1.你的x0没有更新
2.报的错,调试时候发现feval(df,x0)是空矩阵
2楼2015-05-18 11:45:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

材料廖

木虫 (正式写手)

引用回帖:
3楼: Originally posted by 夜的宁静 at 2015-05-18 22:23:32
还是不知道怎么改,我是初学,因为用到现学的,所以基础不怎么样。x0没有更新什么意思
之前的赋值可能有些错误,改成这样还是不行,麻烦再看一下,十分感谢function =newton()
clc;
syms x;
f=@(x)2*log10(5.4 ...

试试这个看对不对
function x = newton()
clc
clear
syms x f df
f = 2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x);
df = diff(2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x));
t=1e-5;
x=0.03;
x0=x+2*t;
k=0;
while abs(x-x0)>t
    k=k+1;
    x0=x;
    x=x0-double(subs(f,x0)/subs(df,x0)); % feval(f,x0)./feval(df,x0);%这句话有错,但不知道错在哪里
end
if k==500
    disp('迭代次数过多,防止死循环终止');
else
    fprintf('迭代到%d次时得到结果%f\n',k,x)
end

» 本帖已获得的红花(最新10朵)

4楼2015-05-19 15:56:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

夜的宁静

金虫 (小有名气)

送红花一朵
引用回帖:
4楼: Originally posted by 材料廖 at 2015-05-19 15:56:37
试试这个看对不对
function x = newton()
clc
clear
syms x f df
f = 2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x);
df = diff(2*log10(5.4*10^-4+2.51*10^-5/sqrt(x)) +1/sqrt(x));
t=1e-5;
x=0.03 ...

很完美,太感谢啦
Tomakeeverydayccount.
5楼2015-05-20 08:37:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见