﻿功能: 多元非线性函数拟合

格式: 
[var, er] = nlinFit(f, a, x, xy, a0, maxa, mina, error)
[var, er] = nlinFit(f, a, x, xy, a0, maxa, mina)
[var, er] = nlinFit(f, a, x, xy, a0, maxa)
[var, er] = nlinFit(f, a, x, xy, a0)
[var, er] = nlinFit(f, a, x, xy)

f : 字符串变量存储的显示拟合表达式
a : 字符串变量存储的需要拟合的变量名称,每个变量以逗号分隔
x : 字符串变量存储的多个已知变量名称,每个变量以逗号分隔
xy: 矩阵变量,主要存储已知采样数据,其中第一列为表达式对应的值,后面几列分别对应x变量的值
a0: 数值或者矩阵变量,表示拟合变量a的初始迭代值.如果为矩阵变量,矩阵大小必须和a中变量个数一致.默认为1.23456789
maxa: 数值或者矩阵变量,表示拟合变量a的上限.如果为矩阵变量,矩阵大小必须和a中变量个数一致.默认为10000
mina: 数值或者矩阵变量,表示拟合变量a的下限.如果为矩阵变量,矩阵大小必须和a中变量个数一致.默认为-10000
error: 迭代终止误差,默认为1e-16

var: 返回找到的最佳变量a的值
er : 返回最终迭代的误差平方和

说明:
本程序内部使用梯度优化窗口模块进行求解。如果对优化有特殊需求, 或者想控制更多优化参数，建议在梯度优化窗口进行设置求解。

例子:

//假如事先有如下数据
xdata =
[ 98.2496723058865     58.6197562788705     46.4706287004382
  49.9288517748606     31.3411922340007     59.9085562675766
  10.5769266423662     86.6714574334544     64.2244769559356
  52.2178927679630     48.9052814659221     82.7272524045441
  2.90479846433960     17.2000807790086     70.7271938541565
  41.1435616859903     20.3991532886397     33.8813519263088
  30.2256995952808     67.1367097492966     30.5053848449632
  62.7563426097652     56.3990648167203     52.4518820235747
  23.9934131614833     78.8292296132209     70.3480669624862
  70.1682779799068     64.3237165940570     26.3066626276386
  65.5557892590555     61.5972670547651     24.1393888947272
  82.8458744487008     5.85097126003866     43.9912629518617
  6.36054347565423     1.74322454339975     16.5295636824004
  64.7784831304003     47.4993679428005     37.6909367915666
  72.1403494813202     86.9469706839635     82.7224125073861
  44.1028767005088     93.6793267231804     81.4969421743867
  55.3637486674654     86.2879557471201     79.0608721222081
  41.1391127580493     33.9911680361215     22.5875386142114
  73.7322528258582     35.4933296961213     2.22069146215017
  94.0187466768635     25.9354386133772     52.5119626207798 ]
x1 = xdata(,1);
x2 = xdata(,2);
x3 = xdata(,3);
y = 2*x1 + 3*sin(x2) + 4*x3^2 + 5;
xy=[y, xdata];//这里xy的第1,2,3,4列数据分别对应y,x1,x2,x3

//即现在的问题是, 已知y,x1,x2,x3的m组数据, 现在我已经知道他们之间有y = a1*x1+a2*sin(x2)+a3*x3^2+a4这种关系,我们现在要求最佳的系数a1,a2,a3,a4
f = "a1*x1+a2*sin(x2)+a3*x3^2+a4";
x = "x1,x2,x3";
a = "a1,a2,a3,a4";
a0=[1 1 1 1];
[ax, er] = nlinfit(f, a, x, xy, a0)//回车后得到如下结果可以发现,和2,3,4,5非常接近
ax =
[ 1.99999999999827
  2.99999999921024
  3.99999999999970
  5.00000000070841 ]
er =
[ 9.1475915219E-18 ]