精华内容
下载资源
问答
  • MATLAB多元非线性拟合
    千次阅读
    2021-04-20 10:48:21

    辛苦几天收集的资料:

    1.使用“nlinfit”

    x1=1150,1000,900,850,700,625,550,475,3350,3500,5900,5800,5700,4600,4625,4725,11650,11200,11200]';

    x2=[175,100,25,0,75,100,150,200,50,600,500,225,100,1225,1600,2000,1200,1000,1550

    ]';

    x=[x1,x2];

    y=[1.44E-02,1.80E-02,6.08E-02,5.59E-02,3.42E-02,7.74E-03,1.17E-03,6.16E-03,1.91E-04,1.91E-04,1.02E-03,2.83E-03,9.52E-05,3.77E-04,2.70E-04,1.87E-04,3.98E-04,4.04E-04,4.02E-04]';

    beta0=[0.1 0.1 1 1];

    myfun=@(a,x)4030.0./pi./4.2./(a(1).*x(:,1).^a(2).*a(3).*x(:,1).^a(4)).*exp(-(x(:,2).^2./2./(a(1).*x(:,1).^a(2)).^2+30.0.^2./2./(a(3).*x(:,1).^a(4)).^2));

    [a,b,c,d,res]=nlinfit(x,y,myfun,beta0);a,res

    plot3(x1,x2,y,'o',x1,x2,myfun(a,x))

    值的选取没有定法,与实际问题的模型有关。

    2.使用“regress”

    线性的不行,用二次函数。

    format long

    A=[...

    0.2 13.6 8503 251 27.4 7.7 9.9 3658 314 13.9 5.8 10.8 7307 433 26.8 7.70 9.70 6717 257 23.8 7.5 9.8 7609 280 21.7 5.6 11.3 4271 533 14.6 6.2 7.6 52169 48 225 3.23 9.16 16516 80 44.1 0.33 11.3 17366 85 54.1 0.14 9.5 14245 91 56.6 5.5 9.7 18184 3 31.6 2.3 8.9 33612 250 114.9 3.3 4.6 73927 5 166 1.9 9.7 32175 150 107.5 0.6 9.9 33088 242 142.3 0.22 11.7 18620 567 60.4 1.88 11.76 27885 267 71.6 2.78 10.9 21780 76 58.7]

    x=A(:,1:4),Y=A(:,5)

    x11=x(:,1).*x(:,1);

    x12=x(:,1).*x(:,2);

    x13=x(:,1).*x(:,3);

    x14=x(:,1).*x(:,4);

    x22=x(:,2).*x(:,2);

    x23=x(:,2).*x(:,3);

    x24=x(:,2).*x(:,4);

    x33=x(:,3).*x(:,3);

    x34=x(:,3).*x(:,4);

    x44=x(:,4).*x(:,4);

    X=[x(:,:),x11,x12,x13,x14,x22,x23,x24,x33,x34,x44]

    [B,BINT,R] = REGRESS(Y,[ones(length(Y),1),X]) 结果:

    B =

    1.0e+003 *

    -1.426098928217992

    -0.004076772421011

    0.255534919787513

    0.000012942581436

    0.000845938681439

    0.000607150442496

    -0.000574488595437

    0.000000405451807

    -0.000042626483419

    -0.011775830339062

    -0.000000876232149

    0.000008150156703

    -0.000000000013441

    -0.000000013991054

    -0.000000969496753

    R =

    3.122573422039807

    0.447341267999400

    -7.343326306615449

    2.107836742251767

    -6.239492394117182

    9.044235126157025

    2.238791755625499

    4.285551199892858

    -2.231536057549363

    -1.979307925154075

    3.503835830046878

    1.414933242530537

    -1.426757776398972

    -12.052007973319576

    14.597045597468522

    -5.024612350970848

    -1.747668123505179

    -2.717435276394376

    B就是系数,R就是预测值与实际值的差值。

    3. 使用“lsqcurvefit”

    clear

    clc

    x=[40 50 60 70 80 90 100 110 120 135 150];

    y=[0.0096 0.0145 0.0194 0.0348 0.0501 0.0751 0.1000 0.1497 0.1993 0.2496 0.2999];

    z=[0.2400 0.2865 0.3330 0.3600 0.3870 0.4010 0.4150 0.4390 0.4630 0.4875 0.5120];

    X0=[1 1 1 1 1 1];

    %只要这样写就可以了

    f=@(p,x)( p(1) + p(2)*x(1,:) +

    p(3)*x(2,:) + p(4)*x(1,:).^2 + p(5)*x(1,:).*x(2,:) +

    p(6)*x(2,:).^2);

    p=lsqcurvefit(f,X0,[x;y],z)

    更多相关内容
  • 基于MATLAB的多元非线性回归模型学习资料
  • Wegstein法注意事项 应注意如果x1和x2两点选择不当则连线的斜率等于1与直线y=x无交点从而迭代无法进行这就是Wegstein法应当避免的陷井引入一个量C Wegstein法注意事项 令q1-C 当q0时Wegstein法退化为简单的不动点...
  • 给出前人人工神经网络逼近性理论,得到用人工神经网络可逼近任意给定的连续函数,并通过计算机对一些非线性函数进行模拟,模拟结果表明这种方法的可行性,给出用人工神经网络解多元非线性方程组的原理。
  • 基于MATLAB的多元非线性回归模型.pdf
  • 讲解MATLAB在多元非线性回归方面的一篇学术论文,非常值得参考,很有用。
  • matlab偏最小二乘法代码,整理各种线性和非线性回归,参考网上资料
  • 关于如何使用Matlab构建多元非线性回归模型在数学建模中有许多情况需要用到多远非线性回归
  • 多元非线性方程组求解(牛顿迭代法,含matlab代码)
  • J.M.奥特加W.C.莱因博尔特 / 科学出版社 / 1983 / 平装 / 32开
  • 多元非线性目标函数求解之目标函数和约束条件如何写
  • 利用牛顿迭代法求解多元非线性方程组,包含MATLAB程序源码和运行结果。
  • 在单因子实验的基础上,以激光功率、光斑移动速率、激光频率作为3个影响因子,建立多元非线性数学回归模型,通过方差分析和回归分析得出该回归模型的相关系数:切口抗张强度的相关系数为0.9131,切口峰值温度的相关...
  • MATLAB源码集锦-多元非线性回归代码
  • matlab多元非线性回归

    2014-09-22 13:41:39
    matlab多元非线性回归
  • 基于多元非线性的电源扩展规划研究
  • 简述了 牛顿--拉夫逊迭代求解的方法,用于多元非线性方程组求解,提供了简单理解的案例,并给出了完整可以运行的matlab代码,提供了matlab案例代码
  • 可以化为线性的多元非线性回归模型PPT课件.pptx
  • 此资源是我自己以前写的一篇随笔(word格式),对牛顿迭代法进行了讲解,并利用matlab进行一元非线性方程以及多元非线性方程组的仿真,附带详细注释,并输出每次迭代的结果,对于学习牛顿迭代法和matlab的新手会有...
  • 实验四 用 MATLAB 求解非线性优化问题 一实验目的 了解 Matlab 的优化工具箱利用 Matlab 求解非线性优化问题 二相关知识 非线性优化包括相当丰富的内容 们这里就 Matlab 提供的一些函数来介 绍相关函数的用法及其所...
  • 如何用matlab进行多元非线性拟合

    千次阅读 2021-04-20 10:48:20
    名流幼苗共回答了17个问题采纳率:100%function zd487022570x1=[0.25,0.278,0.3125,0.357,0.4167,0.3,0.3333,0.375,0.7286,0.5];x2=[0,0.1111,0.125,0.14286,0.1667,0,0.1111,0.125,0.14286,0.1667];...

    名流

    幼苗

    共回答了17个问题采纳率:100%

    function zd487022570

    x1=[0.25,0.278,0.3125,0.357,0.4167,0.3,0.3333,0.375,0.7286,0.5];

    x2=[0,0.1111,0.125,0.14286,0.1667,0,0.1111,0.125,0.14286,0.1667];

    x3=[0,0,0.125,0.2857,0.5,0,0,0.125,0.2857,0.5];

    y=[0.7572,0.6559,0.6383,0.5636,0.4884,0.9783,0.7489,0.686,0.6288,0.4934];

    x = [x1; x2; x3];

    % 使用最小二乘拟合:

    % opt指定拟合选项(注意查看命令窗口提示的优化终止条件,如对结果不满意考虑适当修改)

    % b0为初值(要慎重选择,不同初值得到的结果可能不同)

    opt = optimset('MaxFunEvals',50000,'MaxIter',10000,'TolFun',1E-10)

    % b0 = [0 -10 1 1];

    % b0 = [0.6 -60 15 0.7];

    b0 = [0.7 -137 40 0.7];

    b = lsqcurvefit(@myfun,b0,x,y,[],[],opt);

    A = b(1)

    B = b(2)

    C = b(3)

    D = b(4)

    % 把拟合结果与原始数据对照

    plot(y,'-o');

    hold on

    plot(myfun(b,x),'r:x');

    function y = myfun(x,xdata)

    A = x(1);

    B = x(2);

    C = x(3);

    D = x(4);

    x1 = xdata(1,:);

    x2 = xdata(2,:);

    x3 = xdata(3,:);

    y = A*x1./(1+B*x2+C*x3)+D;

    1年前

    追问

    10

    4591900211

    运行报错了 ??? function zd487022570 | Error: Function definitions are not permitted in this context. 看不懂function zd487022570这是什么意思……

    4591900211

    你是不是文件里还加了别的东西? 把我上面贴的代码直接贴到新建的文件中,然后保存就行,不可能有错。我在6.5和R2007b两个版本上测试过。 最上面的“function zd487022570”是因为调用lsqcurvefit需要把拟合公式写成函数,而这种问题用inline函数或匿名函数都不太方便,所以使用了function。而在一个文件中如果有function就不能是script,所以就把前面的代码取个名字也成为一个function。函数的名字就用的是你提问这个网页的号码加了两个字母的前缀,当然,你可以把它改成其他任何合法的标识符。

    展开全文
  • 为准确预测元宝山露天煤矿涌水量,提高煤矿生产安全系数,基于矿区多降雨量和煤炭产量实测数据,以降雨量和煤炭产量为涌水量影响因子,运用水文地质比拟法和多元非线性回归分析法,分别建立矿区涌水量预测模型,通过对比...
  • MATLAB求解多元非线性方程组

    千次阅读 2021-04-18 13:39:24
    我想求解一个非常复杂的方程组,原理很简单,就是解三个方程求出三个未知数a、b、c,但每一个方程都包含exp、log、sqrt函数,不知道能否用MATLAB求出解来,我试着写了程序,但是运行不出来,我第一次用MATLAB,不...

    我想求解一个非常复杂的方程组,原理很简单,就是解三个方程求出三个未知数a、b、c,但每一个方程都包含exp、log、sqrt函数,不知道能否用MATLAB求出解来,我试着写了程序,但是运行不出来,我第一次用MATLAB,不知道写的对不对,请各位高手帮忙解出该方程组来,我有急用,谢谢了~

    syms a b c

    I=3*a+4*b+3*c;

    f=-4*0.377/1.2*I*log(1+1.2*sqrt(I));

    f1=-2*0.377*(sqrt(I)/(1+1.2*sqrt(I))+2/1.2*log(1+1.2*sqrt(I)));

    B1=-0.03942+0.97225/2/I*(1-(1+2*sqrt(I))*exp(-2*sqrt(I)));

    B11=0.97225/2/I/I*(-1+(1+2*sqrt(I)+2*I)*exp(-2*sqrt(I)));

    C1=0.0179/sqrt(8);

    B2=0.23825+2.9605/0.98/I*(1-(1+1.4*sqrt(I))*exp(-1.4*sqrt(I)))-30.905/72/I*(1-(1+12*sqrt(I))*exp(-12*sqrt(I)));

    B21=2.9605/0.98/I/I*(-1+(1+1.4*sqrt(I)+0.98*I)*exp(-1.4*sqrt(I)))-30.905/72/I/I*(-1+(1+12*sqrt(I)+72*I)*exp(-12*sqrt(I)));

    C2=0.003;

    B3=0.00488+0.4911/2/I*(1-(1+2*sqrt(I))*exp(-2*sqrt(I)));

    B31=0.4911/2/I/I*(-1+(1+2*sqrt(I)+2*I)*exp(-2*sqrt(I)));

    C3=-0.00116/sqrt(8);

    g=(1-(1+2*sqrt(I))*exp(-2*sqrt(I)))/2/I;

    g1=(-1+(1+2*sqrt(I)+2*I)*exp(-2*sqrt(I)))/2/I/I;

    w=1+(I*f1-f+4*a*(a+b+c)*(B1+I*B11+4*(a+b+c)*C1)+2*b*(a+b+c)*(B2+I*B21+4*(a+b+c)*C2)+4*c*(a+b+c)*(B3+I*B31+4*(a+b+c)*C3))/(3*a+2*b+3*c);

    r1=exp(f1+(4/3*a+4/3*(a+b+c))*(B1+2*(a+b+c)*C1)+4/3*c*(B3+2*(a+b+c)*C3)+2/3*b*(B2+2*(a+b+c)*C2)+2*a*(a+b+c)*(2*B11+4/3*C1)+2*c*(a+b+c)*(2*B31+4/3*C3)+b*(a+b+c)*(2*B21+4/3*C2)+8/3*c*(0.125167+1.078184*g)+4/3*b*(2.521475-15.811274*g)+(4/3*c*(a+b+c)+4/6*a*c)*(-0.0080597)+(2/3*b*(a+b+c)+1/3*a*b)*(-1.016358)+1/3*c*b*0.0672253+4*a*c*1.078184*g1+2*a*b*(-15.811274)*g1+2*c*b*10.163009*g1);

    r2=exp(2*f1+(b+(a+b+c))*(B2+2*(a+b+c)*C2)+2*a*(B1+2*(a+b+c)*C1)+2*c*(B3+2*(a+b+c)*C3)+2*a*(a+b+c)*(4*B11+2*C1)+b*(a+b+c)*(4*B21+2*C2)+2*c*(a+b+c)*(4*B31+2*C3)+2*a*(2.521475-15.811274*g)+2*c*(-0.0692694+10.163009*g)+(a*(a+b+c)+1/2*a*b)*(-1.016358)+(c*(a+b+c)+1/2*b*c)*0.0672253+a*c*(-0.0080597)+4*a*b*(-15.811274)*g1+4*c*b*10.163009*g1+8*a*c*1.078184*g1);

    r3=exp(f1+(4/3*c+4/3*(a+b+c))*(B3+2*(a+b+c)*C3)+4/3*a*(B1+2*(a+b+c)*C1)+2/3*b*(B2+2*(a+b+c)*C2)+2*a*(a+b+c)*(2*B11+4/3*C1)+2*c*(a+b+c)*(2*B31+4/3*C3)+b*(a+b+c)*(2*B21+4/3*C2)+8/3*a*(0.125167+1.078184*g)+4/3*b*(-0.0692694+10.163009*g)+(4/3*a*(a+b+c)+4/6*a*c)*(-0.0080597)+(2/3*b*(a+b+c)+1/3*c*b)*0.0672253+1/3*a*b*(-1.016358)+4*a*c*1.078184*g1+2*a*b*(-15.811274)*g1+2*c*b*10.163009*g1);

    eq1=b*r2*(exp(-(3*a+2*b+3*c)*w/55.51))^7-0.076849;

    eq2=b*c*r2*r3*(exp(-(3*a+2*b+3*c)*w/55.51))^6-0.012198;

    eq3=a*r1*(exp(-(3*a+2*b+3*c)*w/55.51))^10-0.092085;

    [a,b,c]=solve(eq1,eq2,eq3,'a,b,c')

    展开全文
  • matlab多元参数非线性回归模型代码阅读KDNuggets的注意事项 在从[ KDNuggets ]()阅读Blog时写了本笔记。 在本简要说明中,它仅包含我感兴趣但并不足够熟悉的术语和主题。 有关完整内容,请参阅原件。 聚类:旨在...
  • 多元线性回归代码以及多元非线性回归代码数学建模
  • 采用Armijo线搜索的牛顿法求解多元非线性函数结果matlab代码
  • 在定量分析时,用一种改进的多元非线性模型进行定标,以降低基体效应对待测元素的影响,并与单变量定标和改进前的多元非线性模型定标进行对比。结果表明,与单变量定标相比,多元非线性模型定标的测量精度有所提高,...
  • 对实验获得的离散点进行拟合,采用最小二乘原理、多元非线性回归模型线性化理论计算并确定模型参数,建立半焦分选特性的多元非线性回归模型,模型计算结果与实验数据吻合较好,相对误差均在9%以内。
  • Python 牛顿法求解多元非线性方程组。通用代码,只需要输入函数,初始值,迭代次数/最小精度即可使用。

    该代码为通用代码,代码使用方式可见代码中示例代码。需安装numpy和sympy库。

    牛顿法简单讲解:

    \left. \begin{array} { c } { x _ { n + 1 } = x _ { n } - \frac { \Delta _ { x } ^ { ( n ) } } { J ( x _ { n } , y _ { n } ) } } \\ { y _ { n + 1 } = y _ { n } - \frac { \Delta _ { y } ^ { ( n ) } } { J ( x _ { n } , y _ { n } ) } } \end{array} \right.

    其中J为雅克比行列式,不了解牛顿法的朋友可以先去了解一下计算过程。

    from math import *
    from sympy import *
    import sympy
    import numpy as np
    
    
    class Newton:
        def __init__(self, equations):
            self.equations = equations
            self.n = len(equations)
            self.x = sympy.symbols(" ".join("x{}".format(i) for i in range(self.n)) + " x{}".format(self.n), real=True)
            self.equationsSymbol = [equations[i](self.x) for i in range(self.n)]
            # 初始化 Jacobian 矩阵
            self.J = np.zeros(self.n * self.n, dtype=sympy.core.add.Add).reshape(self.n, self.n)
            for i in range(self.n):
                for j in range(self.n):
                    self.J[i][j] = sympy.diff(self.equationsSymbol[i], self.x[j])
    
        def cal_J(self, x):
            dict = {self.x[i]: x[i] for i in range(self.n)}
            J = np.zeros(self.n * self.n).reshape(self.n, self.n)
            for i in range(self.n):
                for j in range(self.n):
                    J[i][j] = self.J[i][j].subs(dict)
            return J
    
        def cal_f(self, x):
            f = np.zeros(self.n)
            for i in range(self.n):
                f[i] = self.equations[i](x)
            f.reshape(self.n, 1)
            return f
    
        def interationsByStep(self, x0, step):
            x0 = np.array(x0)
            for i in range(step):
                x0 = x0 - np.linalg.pinv(self.cal_J(x0)) @ self.cal_f(x0)
                print("Step {}:".format(i + 1), ", ".join(["x{} = {}".format(j + 1, x0[j]) for j in range(self.n)]))
            return x0
    
        def interationsByEpsilon(self, x0, epsilon):
            error = float("inf")
            while error >= epsilon:
                cal = np.linalg.pinv(self.cal_J(x0)) @ self.cal_f(x0)
                error = max(abs(cal))
                x0 = x0 - cal
            print(x0)
            return x0
    
    
    if __name__ == "__main__":
        # 多元非线性使用方法
        equations = [lambda x: cos(0.4 * x[1] + x[0] ** 2) + x[0] ** 2 + x[1] ** 2 - 1.6,
                     lambda x: 1.5 * x[0] ** 2 - x[1] ** 2 / 0.36 - 1,
                     lambda x: 3 * x[0] + 4 * x[1] + 5 * x[2]]
    
        newton = Newton(equations)
        newton.interationsByStep([1, 1, 1], 5)
        newton.interationsByEpsilon([1, 1, 1], 0.001)
    
        # 一元非线性使用方法
        equations = [lambda x: cos(x[0]) + sin(x[0])]
    
        newton = Newton(equations)
        newton.interationsByStep([1], 5)
        newton.interationsByEpsilon([1], 0.001)

     个人博客地址:Python 牛顿法求解多元非线性方程组 – Pancake's Personal Website

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,511
精华内容 9,804
关键字:

多元非线性

友情链接: bunbie.zip