查看: 227|回复: 8|关注: 0

[已解决] 如何使用迭代方法计算方程中的系数

[复制链接]

新手

12 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
本帖最后由 yanhui5329 于 2020-9-12 00:56 编辑

x1x2x3y
0.6-3-15580.1924
0.6-3-12350.1597
0.6-3-9744.8465
0.6-3-6785.0573
0.6-3-3774.4763
0.712-151797.959
0.712-121706.577
0.712-91527.018
0.712-61277.465
0.712-3955.354
0.8-1-15560.4408
0.8-1-12790.2153
0.8-1-91010.406
0.8-1-61198.107
0.8
-1
-3
844.2939
想用这个数据,计算出 y=a * x1^2 +b * x2^2+c * x3*x1+d * x2+e 中a~e这几个系数,这样的问题使用迭代方法可以做到吗?,如果可以的话这应该当作线性问题,还是非线性问题来处理呢?
还望赐教,谢谢!
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2422

帖子

732

最佳答案
  • 关注者: 203
发表于 2020-9-12 05:42:07 | 显示全部楼层
肯定是非线性拟合了,用fitnlm就可以
https://www.mathworks.com/help/stats/fitnlm.html
一组拟合系数
[642.4605    6.4889   -8.5375  -14.4482  325.2756]
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2020-9-12 08:38:13 | 显示全部楼层
本帖最后由 yanhui5329 于 2020-9-12 08:52 编辑
TouAkira 发表于 2020-9-12 05:42
肯定是非线性拟合了,用fitnlm就可以
https://www.mathworks.com/help/stats/fitnlm.html
一组拟合系数

好的,谢谢。
有一点不太明白就是,所求的是系数都是1次的,为什么就成了非线性的问题了呢?
此外对于以上数据,我在使用gauss-newton迭代法(如下)进行非线性迭代时,初值都是自己随机的,不同初值迭代过程确实有一定的不同。那么我应该怎么计算出来一个大致的初值比较好呢,最小二乘是不是不适用呢?
麻烦您再指导一下,万分感谢
clear;
clc;
sheet_name = 'Sheet8';
x_zone = 'A2:D361';
left_y_zone = 'E2:E361';
right_y_zone = 'F2:F361';
x = xlsread('E:/_Demo_PyCharm/data_MLS_2_SKL.xlsx',sheet_name,x_zone);
y = xlsread('E:/_Demo_PyCharm/data_MLS_2_SKL.xlsx',sheet_name,left_y_zone);

epsilon = 0.1^15;

% pre=rand(10,1);      %步骤1
pre=[-10   -0.01   -0.002    0.2    0.2    0.014   12   -0.115   -0.113   -2.8]';%不同初值

ma = x(:,1);
alpha = x(:,2);
beta = x(:,3);
c = x(:,4);

for i=1:10000

    f = pre(1) * x(:,1).^2 + pre(2) * x(:,2).^2 + pre(3) * x(:,3).^2 + pre(4) * x(:,1) .* x(:,2) ...
        + pre(5) * x(:,1).* x(:,3) + pre(6) * x(:,2) .* x(:,3) + pre(7) * x(:,1) + pre(8) * x(:,2) ...
        + pre(9) * x(:,3) + pre(10) * x(:,4);


    g = y-f;                    %步骤2中的误差

    p1 = x(:,1).^2;    %偏导
    p2 = x(:,2).^2;      
    p3 = x(:,3).^2;     
    p4 = x(:,1) .* x(:,2);
    p5 = x(:,1).* x(:,3);  
    p6 = x(:,2) .* x(:,3);   
    p7 = x(:,1);  
    p8 = x(:,2);
    p9 = x(:,3);  
    p10 = x(:,4);

    J = [p1 p2 p3 p4 p5 p6 p7 p8 p9 p10];             %步骤2中的雅克比矩阵

    delta = inv(J'*J)*J'* g;    %步骤3,inv(J'*J)*J'为H的逆

    pcur = pre+delta;           %步骤4
    if norm(delta) <epsilon
        break;
    end
    pre = pcur;
end



回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2422

帖子

732

最佳答案
  • 关注者: 203
发表于 2020-9-12 08:49:06 | 显示全部楼层 |此回复为最佳答案
yanhui5329 发表于 2020-9-11 20:38
好的,谢谢。
有一点不太明白就是,所求的是系数都是1次的,为什么就成了非线性的问题了呢?
此外对于以 ...

跟系数关系不大,因为y = a^2 * x + b完全可以通过换元的方式写成 y = A * x + b啊,对于同样一个常数,写成a^2与写成A没有差别。只有自变量里面有非线性的项,比如x^2之类的,就一定是非线性了。

初值这个不好说,遇上简单模型,算法能够保证全局收敛时,随便任选都可以;遇上复杂模型不能保证全局收敛的话,反正我们工科应用中基本要么靠经验猜、要么靠运气碰了。
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2020-9-12 08:58:04 | 显示全部楼层
TouAkira 发表于 2020-9-12 08:49
跟系数关系不大,因为y = a^2 * x + b完全可以通过换元的方式写成 y = A * x + b啊,对于同样一个常数, ...

好的,谢谢谢谢,经你提醒,我才发现之前想错了
关于初值问题,看过一篇论文,他使用最小二乘方法,解出来一个粗解作为初值迭代,但我还是没看明白。
万分感谢,我再去看一看
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

中级

1248 麦片

财富积分


5001500


0

主题

2835

帖子

265

最佳答案
  • 关注者: 175
发表于 2020-9-12 12:04:56 | 显示全部楼层
楼主的问题类似于多项式拟合,完全可以转换成线性问题处理,也就无需考虑初值问题了。
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2020-9-12 14:22:57 | 显示全部楼层
shihe 发表于 2020-9-12 12:04
楼主的问题类似于多项式拟合,完全可以转换成线性问题处理,也就无需考虑初值问题了。 ...

你好,能大致讲一下这个要怎么转换成线性问题吗?
谢谢
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

中级

1248 麦片

财富积分


5001500


0

主题

2835

帖子

265

最佳答案
  • 关注者: 175
发表于 2020-9-12 16:30:58 | 显示全部楼层
把公式:
y=a * x1^2 +b * x2^2+c * x3*x1+d * x2+e
变成:
y=a * x11 +b * x22+c*x31+d * x2+e
这就是标准的4元线性方程拟合了
再提前把对应的数据处理好,即: x11=x1^2,x22=x2^2, x31=x2*x1,新的数据如下:

x11        x22        x31        x2        y
0.36        9        -9        -3        580.1924
0.36        9        -7.2        -3        350.1597
0.36        9        -5.4        -3        744.8465
0.36        9        -3.6        -3        785.0573
0.36        9        -1.8        -3        774.4763
0.49        144        -10.5        12        1797.959
0.49        144        -8.4        12        1706.577
0.49        144        -6.3        12        1527.018
0.49        144        -4.2        12        1277.465
0.49        144        -2.1        12        955.354
0.64        1        -12        -1        560.4408
0.64        1        -9.6        -1        790.2153
0.64        1        -7.2        -1        1010.406
0.64        1        -4.8        -1        1198.107
0.64        1        -2.4        -1        844.2939

很容易得到:
e        603.697797659015
a        457.460571343322
b        0.0612635631184464
c        -4.59659597315419
d        48.9367178885697

回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2020-9-12 17:12:43 | 显示全部楼层
shihe 发表于 2020-9-12 16:30
把公式:
y=a * x1^2 +b * x2^2+c * x3*x1+d * x2+e
变成:

好的,谢谢
我也接下来试试这个
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表