24小时热门版块排行榜    

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

makechange74

铁虫 (小有名气)

[求助] 用Gauss-Neuton算法解非线形最小二乘法问题 已有1人参与

自己根据网上下载源代码修改的高斯-牛顿迭代法求非线形最小二乘问题,老是显示输入参数不足。注释是根据自己理解填写的
m文件代码如下:
function [x,minf] = GN(f,x0,var,eps)
format long;
if nargin == 3                %如果没有设置eps,则eps=1.0e-6
    eps = 1.0e-6;
end
S = transpose(f)*f;            %trnspose是转置,求得r方
k = length(f);                     %
n = length(x0);                 %n为变量个数,但是没用到啊?
x0 = transpose(x0);           %将行向量转置为列向量
tol = 1;                              %初始容差
A = jacobian(f,var);         

while tol>eps
    Fx = zeros(k,1);
    for i=1:k
        Fx(i,1) = subs(f(i),var,x0);
    end
    Sx = subs(S,var,x0);    %求得f转置与其本身值,
    Ax = subs(A,var,x0);    %雅克比矩阵的值
    gSx = transpose(Ax)*Fx;   

    dx = -transpose(Ax)*Ax\gSx;
    x0 = x0 + dx;
    tol = norm(dx);           %tol=dx绝对值之和
end
minf = subs(S,var,x);
format short;
x = x0;
end
命令窗口调用如下:
xdata = S1o;                     %S1o及下面的ydata1都是自己的数据
syms z1 z2 z3 z4 z5
f = ydata1 - exp(z1)./(exp(z1)+exp(-z1)).*exp(-(xdata./exp(z3)).^exp(z2))+(1-exp(z1)./(exp(z1)+exp(-z1))).*exp(-(xdata./exp(z5)).^exp(z4));
x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257];
var = findsym(f);
eps = 1.0e-3;
>> GN
提示错误如下:
错误使用 GN (line 6)
输入参数的数目不足。
回复此楼

» 收录本帖的淘帖专辑推荐

source

» 猜你喜欢

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

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

makechange74

铁虫 (小有名气)

引用回帖:
6楼: Originally posted by yongcailiu at 2015-01-25 11:48:41
明白你要解决的问题了。就程序而言,x0代表z1-z5的初始值,不过matlab的程序实现过程好像有问题,可以将f=...;x0=...;这两行代码颠倒下次序,再讲f里面的z1-z5替换成x0(1)-x0(5)。另外,就像你说的,Gauss-Newton法 ...

一直在关注帖子,可就是没看到回复,真是囧。。
按照你的建议试了试,如果在命令窗口中输入syms x0(1) 则会提醒错误使用syms,如果只定义syms x0,令yfitdata=exp(x0(1))./(exp(x0(1))+exp(-x0(1))).*exp(-(xdata./exp(x0(3))).^exp(x0(2)))+(1-exp(x0(1))./(exp(x0(1))+exp(-x0(1)))).*exp(-(xdata./exp(x0(5))).^exp(x0(4)));也会提醒错误,
在输入命令时,应该是不允许()作为变量;但是如果将yfitdata(我函数名称写的是R)作为一个函数写在m文件中,
function F = R(x0,xdata)
F = exp(x0(1))./(exp(x0(1))+exp(-x0(1))).*exp(-(xdata./exp(x0(3))).^exp(x0(2)))+(1-exp(x0(1))./(exp(x0(1))+exp(-x0(1)))).*exp(-(xdata./exp(x0(5))).^exp(x0(4)));

调用如下:
syms x0
>>  x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257];
>> xdata = S1o;
>> f = 0.5.*(ydata1 - R(x0,xdata)).^2;
错误使用 sym>checkindex (line 1545)
Index must be a positive integer or logical.

出错 sym>privformatmatrix (line 1503)
    checkindex(x);

出错 sym>privformat (line 1478)
    s = privformatmatrix(x);

出错 sym/subsref (line 685)
            [inds{k},refs{k}] = privformat(inds{k});
真是不知道该怎么办了?

此外,按照最原本程序,错误提醒的是从 sym 转换为 double 时出现以下错误:
是不是跟sym定义的类型有关,这个问题还不是很明白,网络找的资源只有源程序,没有对应例子,对于新手还是有些困难
7楼2015-01-27 08:57:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 9 个回答

yongcailiu

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
makechange74: 金币+5, ★★★很有帮助 2015-01-23 19:13:55
参数没有加进去呀,当然调用错误了。eps=1.0e-3;下面一行的GN替换成GN(f,x0,var,eps)试一下
2楼2015-01-23 08:56:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

makechange74

铁虫 (小有名气)

引用回帖:
2楼: Originally posted by yongcailiu at 2015-01-23 08:56:32
参数没有加进去呀,当然调用错误了。eps=1.0e-3;下面一行的GN替换成GN(f,x0,var,eps)试一下

function [x,minf] = GN(f,x0,var,eps)
format long;
if nargin == 3                %如果没有设置eps,则eps=1.0e-6
    eps = 1.0e-6;
end
m = 0;
S = transpose(f)*f;           %trnspose是转置,求得r方
k = length(f);                %
%n = length(x0);               %n为变量个数,但是没用到啊?
x0 = transpose(x0);           %将行向量转置为列向量
tol = 1;                      %初始容差
A = jacobian(f,var);         

while tol>eps
    Fx = zeros(k,1);
    for i=1:k
        Fx(i,1) = subs(f(i),var,x0);
    end
    Sx = subs(S,var,x0);    %求得f转置与其本身值,
    Ax = subs(A,var,x0);    %雅克比矩阵的值
    gSx = transpose(Ax)*Fx;   

    dx = -transpose(Ax)*Ax\gSx;
    x0 = x0 + dx;
    tol = norm(dx);           %tol=dx绝对值之和
    m = m+1;
    if(m>100000)
        disp('迭代步数太多,可能不收敛');
        return;
    end
end
minf = subs(S,var,x);
format short;
x = x0;
end  


xdata = S1o;
f = ydata1 - exp(z1)./(exp(z1)+exp(-z1)).*exp(-(xdata./exp(z3)).^exp(z2))+(1-exp(z1)./(exp(z1)+exp(-z1))).*exp(-(xdata./exp(z5)).^exp(z4));
x0 = [1.7380;0.9555;-1.3863;2.0149;-2.5257];
var = findsym(f);
eps = 1.0e-3;
GN(f,x0,var,eps)
从 sym 转换为 double 时出现以下错误:


出错 GN (line 17)
        Fx(i,1) = subs(f(i),var,x0);

又出新问题了,还是麻烦能够解答一下
以下是数据
S1o:0.0580000000000000
0.0710000000000000
0.0760000000000000
0.0790000000000000
0.0830000000000000
0.0870000000000000
0.0980000000000000
0.111000000000000
0.117000000000000
0.122000000000000
0.122000000000000
0.133000000000000
0.134000000000000
0.138000000000000
0.140000000000000
0.142000000000000
0.150000000000000
0.155000000000000
0.160000000000000
0.160000000000000
0.168000000000000
0.173000000000000
0.173000000000000
0.173000000000000
0.175000000000000
0.176000000000000
0.177000000000000
0.181000000000000
0.182000000000000
0.183000000000000
0.194000000000000
0.203000000000000
0.214000000000000
0.218000000000000
0.222100000000000
0.223000000000000
0.225000000000000
0.247000000000000
0.253000000000000
0.256000000000000
0.257000000000000
0.258000000000000
0.262000000000000
0.263000000000000
0.264000000000000
0.266000000000000
0.267000000000000
0.276000000000000
0.278000000000000
0.280000000000000
0.288000000000000
0.289000000000000
0.306000000000000
0.315000000000000
0.333000000000000
0.335000000000000
0.353000000000000
0.389000000000000
0.404000000000000
0.418000000000000
0.456000000000000
0.489000000000000
ydata1:
0.983870967741936
0.967741935483871
0.951612903225807
0.935483870967742
0.919354838709677
0.903225806451613
0.887096774193548
0.870967741935484
0.854838709677419
0.838709677419355
0.822580645161290
0.806451612903226
0.790322580645161
0.774193548387097
0.758064516129032
0.741935483870968
0.725806451612903
0.709677419354839
0.693548387096774
0.677419354838710
0.661290322580645
0.645161290322581
0.629032258064516
0.612903225806452
0.596774193548387
0.580645161290322
0.564516129032258
0.548387096774193
0.532258064516129
0.516129032258064
0.500000000000000
0.483870967741935
0.467741935483871
0.451612903225806
0.435483870967742
0.419354838709677
0.403225806451613
0.387096774193548
0.370967741935484
0.354838709677419
0.338709677419355
0.322580645161290
0.306451612903226
0.290322580645161
0.274193548387097
0.258064516129032
0.241935483870968
0.225806451612903
0.209677419354839
0.193548387096774
0.177419354838710
0.161290322580645
0.145161290322581
0.129032258064516
0.112903225806452
0.0967741935483870
0.0806451612903230
0.0645161290322580
0.0483870967741930
0.0322580645161290
0.0161290322580639
0
3楼2015-01-23 19:12:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yongcailiu

金虫 (小有名气)

z1-z5是符号?如果如此的话,我没有见过Gauss-Newton法使用在这种场合下的。
4楼2015-01-24 11:14:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 我不理解! +19 Edward_pc 2026-08-26 27/1350 2026-09-02 12:08 by Ai19911123
[基金申请] 要骂人了,新模版改版就是要淡化问题凝练这种虚的东西,结果有个评委还在说凝练得不够 +9 瞬息宇宙 2026-08-31 16/800 2026-09-02 12:07 by Ai19911123
[基金申请] 基金系统什么内容也没有 30+4 winsaint 2026-08-27 10/500 2026-09-02 11:35 by 大不刘6
[基金申请] 学科评审组评审是指会评吗? +5 瞬息宇宙 2026-08-31 5/250 2026-09-02 10:13 by 雨冰共舞
[文学芳草园] 梦想 +5 myrtle 2026-08-26 8/400 2026-09-02 02:42 by Leogzhya
[基金申请] 面上合作单位盖章 +6 ssyjh 2026-08-27 9/450 2026-09-01 20:01 by huagongfeihu
[基金申请] 面上函评意见出来了,像什么等级? 20+4 Tsingking1 2026-08-27 17/850 2026-09-01 19:51 by 超级无敌华子
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +13 Kittylucky 2026-08-27 14/700 2026-09-01 11:06 by feng6531
[论文投稿] 小白求助 投论文要求的highlights应该如何写 5+3 l1963982152 2026-08-29 4/200 2026-09-01 09:04 by 北京莱茵编辑
[基金申请] 国社科又开始会评了,不知道这次命运如何 +7 雨打竹帘 2026-08-30 11/550 2026-08-31 23:16 by hittle2008
[基金申请] 基金未中,这种答复是模板吗? +6 zhaosm1982 2026-08-27 7/350 2026-08-31 21:18 by qdxxmc
[基金申请] 29号明天会评吗 +4 笨笨唐 2026-08-28 4/200 2026-08-31 09:30 by huixian257
[基金申请] 基金不中,共勉 +12 eulota 2026-08-26 12/600 2026-08-31 08:42 by ZJTJZ
[基金申请] 为什么到现在没收到通知? +5 tannykie 2026-08-29 5/250 2026-08-30 21:05 by purplejack
[基金申请] 有没有仍没收到信息的 +7 德尚中行 2026-08-27 8/400 2026-08-30 20:52 by purplejack
[考博] 找导师 +6 yuanjiabao 2026-08-29 7/350 2026-08-30 14:40 by 生科新手
[基金申请] 我就是申请一个面上项目而已,这评审意见是按照杰青的条件评的吧? +6 gouxfjh 2026-08-28 11/550 2026-08-30 07:57 by gouxfjh
[基金申请] 国自然评审意见 +13 wangmingqi 2026-08-28 19/950 2026-08-29 10:22 by Poppy1104
[基金申请] 2026年叶企孙基金 +4 bud_bud 2026-08-27 7/350 2026-08-29 07:23 by foolishmani
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
信息提示
请填处理意见