急求数据拟和程序 ( 积分: 300 )

  • 主题发起人 主题发起人 iamsk
  • 开始时间 开始时间
I

iamsk

Unregistered / Unconfirmed
GUEST, unregistred user!
已知点(x1,y1),(x2, y2)...(xn, yn)(非线性)对这些点进行数据拟和,求出xn+1对应值?要有源码, 谢谢!
 
已知点(x1,y1),(x2, y2)...(xn, yn)(非线性)对这些点进行数据拟和,求出xn+1对应值?要有源码, 谢谢!
 
unit CYHSMatrixUnit;
interface
uses Classes,math,SysUtils;
{
TCMatrix:是为了用最小二乘法拟和曲线而开发的一个类,所以在这里的数组必须满足最小二乘法
的要求,x,y数组必须维数相同。
作者:yanghai0437 QQ:955743
时间:2003年5月19日
本类中使用的数组下标均是0序的,也就是数组的第一个值的下标是0,第二个值的下标是1。
}
type
TCMatrix = class
private
Fdou_MaxtrixValue : double; //用于返回行列式的值
FbIsNeedSort : boolean; //是否需要排序
FnCoordinateSize : Integer; //坐标个数
FnMaxPower : Integer; //最高次幂

FxCoordinate : array of double; //X坐标数组
FyCoordinate : array of double; //Y坐标数组
FSumxCoordinate : array of double; //最小二乘法中的X^n的和的值(n=0,...m+m) m是方程的次数
FSumyCoordinate : array of double; //最小二乘法中的X^n*Y的和的值(n=0,...m) m是方程的次数
procedure Muti(); //最小二乘法

public

bLuSuccess : boolean ; //true表示进行Lu分解成功
pEquationPara : array of double; //求出来的方程的系数 * pEquationPara[0]是常数项 * pEquationPara[1]是一次项系数...
function GetMaxPower():Integer; //得到方程的最高次幂
procedure SetMaxPower(nMaxPower :Integer =1); //设置方程的最高次幂
constructor Create;
procedure SetNeedSort(IsSort :boolean = false); //设置是否需要排序
function SetXYCoordinate(pXCoordinate: array of double;pYCoordinate: array of double ):boolean;//设置X,y坐标数组
function GetCoordinateSize():Integer; //返回x,y坐标个数
procedure SortArray(var pSort:array of double); //为数组排序--冒泡排序法
//根据X坐标排序--冒泡排序法
procedure SortTwoArray(var pSortx:array of double;var pSortY:array of double); //为数组排序--冒泡排序法
function SumArray(pSum:array of double):double; //求和
function MatrixLU(var Matrixs :array of double;i_Power:integer;IsOnlyLu:boolean = true):double; //行列式 L U分解
function BeginComPuter():double;
function GetMatrixValue():double;//返回行列式的值

end;
const
MaxMi = 10 ; //用最小二乘法时是最高次幂 ;只求行列式的值时是最大阶数

implementation
//------------------------------------------------------------------------------
//功能:构造函数,初始化默认值
//参数:无
//返回值:无

constructor TCMatrix.Create;
begin
bLuSuccess :=false;
FnMaxPower :=1;
FbIsNeedSort := false;
Fdou_MaxtrixValue :=0;
FnCoordinateSize :=0;
inherited;
end;
//------------------------------------------------------------------------------
//功能:设置方程的最高次幂,默认是1
//参数:无
//返回值:无
procedure TCMatrix.SetMaxPower(nMaxPower :Integer =1);
begin
FnMaxPower := nMaxPower;
//最高次幂不能超过MaxMi
if(FnMaxPower>MaxMi)then FnMaxPower :=MaxMi;
end;
//------------------------------------------------------------------------------
//功能:得到在这次使用过程中的方程的最高次幂
//参数:无
//返回值:方程的最高次幂
//
function TCMatrix.GetMaxPower():Integer;
begin
Result:= FnMaxPower;
end;

//------------------------------------------------------------------------------
//功能:制作坐标数组的副本。为这个类设置坐标数组,主要是为了在最小二乘法使用
//参数:pXCoordinate x 坐标,也是最小二乘法中的因变量,pYCoordinate ,y坐标
//返回值:如果制作副本成功返回true,否则返回false,
//如果两个数组的维数不同则不能进行最小二乘法,所以就会返回false

function TCMatrix.SetXYCoordinate(pXCoordinate: array of double;pYCoordinate: array of double ):boolean;//设置X,y坐标数组
var
nXCount,nYCount,i,nLowX,nLowY:Integer;
begin

//先释放坐标数组
SetLength(FxCoordinate,0); //X坐标数组
SetLength(FyCoordinate,0); //Y坐标数组
nXCount :=High(pXCoordinate);
nYCount :=High(pYCoordinate);
nLowX :=Low(pXCoordinate);
nLowY :=Low(pYCoordinate);
//判断是否有数据
if ((nXCount =0)or(nXCount<>nYCount)or(nLowX<>nLowY)) then
begin
result:=false;
exit;
end;
FnCoordinateSize := nXCount;
SetLength(FxCoordinate,nXCount+1); //X坐标数组
SetLength(FyCoordinate,nXCount+1); //Y坐标数组
for i:=nLowx to nXCount do
begin
FxCoordinate:= pXCoordinate;
FYCoordinate:= pYCoordinate;
end;
result:=true;
end;
//------------------------------------------------------------------------------
//功能:返回x,y坐标个数
//参数:
//返回值:返回x,y坐标个数
function TCMatrix.GetCoordinateSize():Integer;
begin
Result:=FnCoordinateSize;
end;
//------------------------------------------------------------------------------
//功能:为double数组排序(升序)--冒泡排序法
//参数:
//返回值:

procedure TCMatrix.SortArray(var pSort:array of double);
var
nCount,nLow,i,j :Integer;
d_temp :double; //临时变量
begin
nCount :=High(pSort);
nLow :=Low(pSort);
//数组中没有数据,返回
if(nCount=0) then exit;
for i := nLow to nCount - 1 do
begin
for j := i + 1 to nCount do
begin
if( pSort > pSort[j] ) then
begin
d_temp := pSort[j] ;
pSort[j]:= pSort;
pSort:= d_temp;
end;
end; //end for j
end;// end for i
end;
//------------------------------------------------------------------------------
//功能:为double数组排序。在坐标系中的排序(升序),(x,y)代表一个点,所以y数组坐标将跟着
//x数组坐标变化,而--冒泡排序法
//参数: pSortx 坐标数组 pSortY 坐标数组
//返回值:
procedure TCMatrix.SortTwoArray(var pSortx:array of double;var pSortY:array of double);
var
nCount,nLow,i,j :Integer;
d_tempx,d_tempy :double; //临时变量
begin//根据X坐标排序--冒泡排序法

nCount :=High(pSortx);
nLow :=Low(pSortx);
i :=High(pSortY);
j :=Low(pSortY);
//数组中没有数据,或者两者的维数不相等,或者两者的初始维数序号不等,则不能排序,返回
if((nCount=0) or(i<>nCount)or(j<>nLow)) then exit;

for i := nLow to nCount - 1 do
begin
for j := i + 1 to nCount do
begin
if( pSortx > pSortx[j] ) then
begin //Y坐标根据X坐标变化
d_tempx := pSortx[j] ;
pSortx[j]:= pSortx;
pSortx:= d_tempx;

d_tempy := pSorty[j] ;
pSorty[j]:= pSorty;
pSorty:= d_tempy;
end;

end;
end;
end;
//------------------------------------------------------------------------------
//功能:为double数组求和
//参数: pSum double数组
//返回值:求出的和
function TCMatrix.SumArray(pSum:array of double):double;
var
nCount,nLow,i : Integer;
begin
Result:=0;
nCount := High(pSum); //得到数组的大小
nLow := Low(pSum);
for i :=nLow to nCount do
Result := Result + pSum;

end;
//------------------------------------------------------------------------------
//功能:最小二乘法
//参数: 具体请参考计算方法书中的最小二乘法章节
//返回值:将计算出来的值存入FSumxCoordinate ,FSumyCoordinate两个数组中
//
procedure TCMatrix.Muti();
var
dou_TempSum, dou_m : double;
i ,N , k :Integer;
TempX: array of double;
begin
//重新分配数组空间
SetLength(FSumxCoordinate,0); //最小二乘法中的X^n的和的值(n=0,...m+m) m是方程的次数
SetLength(FSumyCoordinate,0); //最小二乘法中的X^n*Y的和的值(n=0,...m) m是方程的次数
N := High(FxCoordinate)+1;
SetLength(FSumxCoordinate,FnMaxPower + FnMaxPower+1); //得到坐标的个数
for i := 0 to FnMaxPower + FnMaxPower do
begin
dou_TempSum := 0;
SetLength(TempX,0);
SetLength(TempX,N);
for k := 0 to N - 1 do
begin
dou_m := power(FxCoordinate[k],i); //求X的i次方
TempX[k]:=dou_m ;
end;
dou_TempSum := dou_TempSum + SumArray(TempX); //求X的i次方的和
//最小二乘法中的X^n的和的值(n=0,...m+m) m是方程的次数
FSumxCoordinate := dou_TempSum;
end;
SetLength(FSumyCoordinate,FnMaxPower+1);
for i := 0 to FnMaxPower do
begin
dou_TempSum := 0;
SetLength(TempX,0);
SetLength(TempX,N);
for k := 0 to N - 1 do
begin

dou_m := power(FxCoordinate[k],i) ; //求X(k)的i次方
dou_m := dou_m * FyCoordinate[k]; //求X(k)的i次方 乘以 y(k)
TempX[k]:=dou_m ;
end;
dou_TempSum := dou_TempSum + SumArray(TempX);//求X(k)的i次方 乘以 y(k) 的和
//最小二乘法中的X^n*Y的和的值(n=0,...m) m是方程的次数
FSumyCoordinate:=dou_TempSum;
end;

end;
//------------------------------------------------------------------------------
//功能:行列式 L U分解
//参数: Matrixs 矩阵行列式数组,i_Power 阶数-1,
//IsOnlyLu false 表示还要进行最小二乘法计算,得到拟和曲线系数,true表示只求行列式的值
//返回值: L U分解成功返回true,否则返回false
//

function TCMatrix.MatrixLU(var Matrixs :array of double;i_Power:integer;IsOnlyLu:boolean = true):double;
var
dou_Result,dou_temp: double;
dou_Matrixs: array [0..MaxMi-1,0..MaxMi-1] of double; //定义二维数组 用于存储 转换后的行列式的值
i_Plusminus,j,i,i_x:integer;
L: array [0..MaxMi-1,0..MaxMi-1] of double;
U: array [0..MaxMi-1,0..MaxMi-1] of double;
dou_Y:array [0..MaxMi-1] of double;
Temp ,TempB:double;
k, m, N ,CC:Integer;
BB , Rows :Integer;
label SS1,SS2,SS3;
begin
{//初始化数组,没有必要
for i:=0 to MaxMi-1 do
begin
for j:=0 to MaxMi-1 do
begin
dou_Matrixs[j]:=0;
L[j]:=0;
U[j]:=0;
end;
dou_Y:=0;
end;
}
//*Matrixs 行列式数组
//i_Power 方程的次数 也就是行列式的阶-1,
//IsOnlyLu false 表示还要进行最小二乘法计算
bLuSuccess := false;
if(i_Power>MaxMi) then //方程的次数高于指定的最高次数
begin
result:= 0;
exit;
end;
dou_Result := 0; //要返回的值

i_Plusminus := 1; //计算时如果行列式进行了列与列的交换,则结果变负

//注意:行列式数组的下标是从0开始的
if(not IsOnlyLu) then
begin
//用最小二乘法时根据正规方程组的系数数组算出来,
//再转换成二维数组用下面的公式
//正规方程组例子(A0,A1,A2是多项式的系数)
//9 A0 + 53 A1 + 381 A2 = 76
//53 A0 + 381 A1 + 3017 A2 = 489
//381 A0 + 3017 A1 + 25317 A2 = 3547
//所以Matrixs[] = {9,53,381,3017,25317}
//
for i := 0 to i_Power do
begin
for j := 0 to i_Power do
dou_Matrixs[j] := Matrixs[j + i];
end;
end
else//只用于与求行列式的值时,把行列式直接付值给数组
begin
//求行列式(3阶)
// 1 3 302
// -4 3 297
// 2 2 203
// 所以Matrixs[] = {1,3, 302 , -4 ,3 , 297, 2, 2 ,203}

i_x := (i_Power+1) * (i_Power+1);
//行数和列数不相等则不能计算行列式的值
i:= High(Matrixs)+1;
if(i_x<>i) then
begin
result:=dou_Result;
exit;
end;
//把数组转换成矩阵行列式,矩阵行列式数组的下标是从0开始的
for i := 0 to i_Power do
begin
for j := 0 to i_Power do
dou_Matrixs[j] := Matrixs[j+i*(i_Power+1)];

end;
end;
//判断是否需要换列--当第一行第一列=0时会产生除0错误,所以需要交换
if(abs(dou_Matrixs[0][0])<=0.000001) then
begin //需要交换
j :=0;
for i := 1 to i_Power do
begin
if(abs(dou_Matrixs[0])>=0.000001) then //只在第一行中找不=0的值
begin
j := i; //找到第一行不为0的列
break;
end;
end;
if(j<>0) then //找到了不=0的列的值
begin
i_Plusminus := i_Plusminus * (-1);
dou_temp:=0;
for i := 0 to i_Power do //列互换
begin
dou_temp := dou_Matrixs[0];
dou_Matrixs[0] := dou_Matrixs[j];
dou_Matrixs[j] := dou_temp;
end;
end
else //第一行全为0,则行列式的值=0
begin
Result := 0;
exit;
end;
end;
//------------开始LU分解--------------------------------------------------//

BB := 1;
Rows := i_Power +1; //行列式的阶数
//行列式分布如下
//a[0][0] a[0][1] a[0][2] ... a[0][Rows-1]
//a[1][0] a[1][1] a[1][2] ... a[1][Rows-1]
//.
//.
//.
//a[Rows-1][0] a[Rows-1][1] a[Rows-1][2] ... a[Rows-1][Rows-1]

for i := 0 to Rows-1 do
begin
L := 1 ; //获得L = 1
U[0] := dou_Matrixs[0] ; //获得U[0] = a[0]
end;
if(Rows >= 2) then //阶数>=2
begin
for i := 1 to Rows-1 do
L[0] := dou_Matrixs[0] / U[0][0];//获得L[0] = a[0] / u[0][0]

end ;
//L[j] U[j] 对应位置实例
//1/ /U11 U12 U13 U14
//L21 1/ /U22 U23 U24
//L31 L32 1/ /U33 U34
//L41 L42 L43 1/ /U44


// L = 1 (i=0,1,2,...,n-1)
// U[0][j] = a[0][j] (j=1,2,3,...,n)
// L[0] = a[0] / U[0][0] (i=1,2,...,n-1)
// L[j] = (a[j] -∑(k=(0,..j-1) L[k] * U[k][j]) / u[j][j] (i=2,...,n-1)(j=0,1,...,i-1)
// U[j] = a[j] -∑(k=(0,..i-1))(L[k] * U[k][j]) (i=1,...,n-1)(j=i,i+1,...,n-1)

if(Rows >= 2 ) then
begin
CC:=1; //从第二行开始求 U[][]
SS2:
for i := CC to Rows-1 do
begin
CC := i+1; //下次循环从i+1行开始
for j := i to Rows-1 do
begin
TempB := 0;
for k := 0 to i-1 do
TempB := TempB + L[k] * U[k][j]; //∑(k=(0,..i-1))(L[k] * U[k][j])

U[j] := dou_Matrixs[j] - TempB; //a[j] -∑(k=(0,..i-1))(L[k] * U[k][j])
if((i =j) and(abs(U[j]) <= 0.000001) )then //分解时对角线上的U不能等于0
begin
result := 0;
exit;
end;
end; //该行的U[][]已经求完了

if(i < Rows-1)then //求下行的U时要用到下一行的L
begin
BB := i + 1 ;
goto SS1 ; //所以先去计算下行的L[][]
end
else
goto SS3 ; //所有的L U都计算完了
end; //end for i
end; //if(Rows >= 2 ) then

if(Rows >= 3) then //只有>=3阶的行列式才会再计算L值 <=2时L值可以直接得到
begin
SS1:
for m := BB to Rows-1 do //从要计算的行开始计算
begin
for N := 0 to m - 1 do
begin
Temp := 0;
for k := 0 to N - 1 do
Temp := Temp + L[m][k] * U[k][N]; //∑(k=(0,..j-1) L[k] * U[k][j])

L[m][N] := (dou_Matrixs[m][N] - Temp) / U[N][N]; //(a[j] -∑(k=(0,..j-1) L[k] * U[k][j]) / u[j][j]
end;// end for N
if(m <= Rows-1) then //该行的L值已经求完
goto SS2; //去计算下行的U


end;// end for m
end ;// end if
SS3:
dou_Result := U[0][0] ;
if(Rows >= 2) then
begin
//行列式的值|A |= |L|*|U|= U[1][1]*U[2][2]*...U[m][m] (m=行列式的阶数) */

for i := 1 to Rows-1 do
dou_Result := dou_Result * U;

end;
dou_Result := dou_Result * i_Plusminus; //得到行列式的值
Fdou_MaxtrixValue := dou_Result ;
//------------进行LU分解完成-------------------------------------------------------//
if(not IsOnlyLu) then
begin
//------------开始用最小二乘法求方程式的系数-----------//
// 求出来的方程的系数存储在中pEquationPara,其中
// * pEquationPara[0]是常数项 * pEquationPara[1]是一次项系数...
//用A的LU分解求解方程组Ly=b中的 y时用如下公式
// y[1] = b[1];
// y = b - ∑(k=(1,..i-1) L[k] * y[k]
// x[n] = y[n]/U[n][n] (n是行列式的阶数)
// x = (y - ∑(k=(n,..i+1) (U[k] * x[k]) ) / U


// pCoefficienty 就是 上面的b
// x数组就是方程的解,也就是用最小二乘法时的系数


//求出Y (见计算方法P66页)

dou_Y[0] := FSumyCoordinate[0] ; //得到y[0]

for i := 0 to i_Power-1 do
begin
Temp := 0;
for k := 0 to i do
Temp := Temp + dou_Y[k] * L[i + 1][k]; // ∑(k=(0,..i) L[k] * y[k]

TempB := FSumyCoordinate[i+1]; //得到b
dou_Y[i + 1] := TempB - Temp; //得到y
end;
//求出方程式的(解)系数
Temp := dou_Y[i_Power ] / U[i_Power ][i_Power ]; //得到x[n]
SetLength(pEquationPara,0);
SetLength(pEquationPara,i_Power + 1);
for i:=0 to i_Power do //初始化系数数组
pEquationPara:=0;

pEquationPara[i_Power]:=Temp ; //将x[n]存入pEquationPara数组中
for i := i_Power-1 downto 0 do
begin
Temp := 0;
for k := i+1 to i_Power+1 do
Temp := Temp + U[k] * pEquationPara[k]; //∑(k=(n,..i+1) (U[k] * x[k])
TempB := (dou_Y - Temp) / U; //(y - ∑(k=(n,..i+1) (U[k] * x[k]) ) / U
pEquationPara:=TempB ; //将x存入pEquationPara数组中
end;
end;
bLuSuccess := true;
result:= dou_Result;
end;
//------------------------------------------------------------------------------
//功能:一个执行计算的过程 ,在执行前需要先设置最高次幂,是否排序,和坐标数组3项,
// 然后才能进行计算
//参数:
//
//返回值:
//
function TCMatrix.BeginComPuter():double;
var
dt: double;
begin
//本函数用于最小二乘法求拟合方程
//返回值 用LU分解时求出的行列式的值
{
用最小二乘法的例子
SetMaxPower(2) //第一步设置方程的最高次幂
if(SetXYCoordinate(&amp;pXCoordinate, &amp;pYCoordinate)) //第二步设置X,Y坐标--返回真表示设置的坐标没有问题
begin
SetNeedSort(false); //第三步数组是否需要排序 IsNeedSort 默认是不排序 ,不排序时可不用此函数
BeginComPuter() //第四步 调用此函数求拟合方程
------CMatrix m_Matrix-------------
CString strtemp;
strtemp.Format(&quot;%f&quot;, m_Matrix.pEquationPara->GetAt(1)); //得到常数项
CString ss,sc;
for(int i =2 ;i<= 2 ;i++)
begin
ss.Format(&quot;%.5f&quot;, m_Matrix.pEquationPara->GetAt(i)); //得到其它系数
sc.Format(&quot;%d&quot;,i);
strtemp = strtemp +&quot;+&quot;+ ss +&quot;X^&quot;+sc;
end;
end;
}

// 求行列式的值的例子---不需要调用其它函数
// m_Value = m_Matrix.MatrixLU(&amp;pxCoordinate,3,true);
// 其中 pxCoordinate是行列式数组 3表示4阶(阶数-1) ,true 表示求行列式的值 ,此处必须是true

if(FbIsNeedSort) then //判断数组是否需要排序
SortTwoArray(FxCoordinate,FyCoordinate);

Muti(); //通过输入的坐标求出正规方程组
dt:= MatrixLU(FSumxCoordinate,FnMaxPower,false);
//pCoefficientx 是正规方程组左边的值 m_i_MaxPower 是拟合方程的最高次数
//false 表示求拟合方程 ,此处必须是false
result:= dt;
end;
//------------------------------------------------------------------------------
//功能:设置坐标数组是否需要排序
//
//参数:IsSort true表示需要排序
//
//返回值:
//
procedure TCMatrix.SetNeedSort(IsSort :boolean = false);
begin
FbIsNeedSort := IsSort;
end;
//
//------------------------------------------------------------------------------
//功能:计算行列式的值后,可以用这个函数得到行列式的值
//
//参数:
//
//返回值:返回行列式的值
//
function TCMatrix.GetMatrixValue():double;
begin
result:= Fdou_MaxtrixValue;
end;

end.
///使用
var
sngxt,sngyt:array of double;
strtemp,strSingleValue:String;
nCount,i,nJingdu:Integer;
begin
//拟合曲线 6次

sngxt:=nil;
sngyt:=nil;
SetLength(sngxt,7);
SetLength(sngyt,7);
try
sngyt[0]:= strtofloat(Edit18.Text);
sngyt[1]:= strtofloat(Edit20.Text);
sngyt[2]:= strtofloat(Edit22.Text);
sngyt[3]:= strtofloat(Edit24.Text);
sngyt[4]:= strtofloat(Edit26.Text);
sngyt[5]:= strtofloat(Edit28.Text);
sngyt[6]:= strtofloat(Edit30.Text);

sngxt[0]:= strtofloat(Edit19.Text);
sngxt[1]:= strtofloat(Edit21.Text);
sngxt[2]:= strtofloat(Edit23.Text);
sngxt[3]:= strtofloat(Edit25.Text);
sngxt[4]:= strtofloat(Edit27.Text);
sngxt[5]:= strtofloat(Edit29.Text);
sngxt[6]:= strtofloat(Edit31.Text);
except

ShowMessage('输入的温度有错误');
exit;
end;
//设置次数
CYHSMatrix.SetMaxPower(6);

//设置坐标
CYHSMatrix.SetXYCoordinate(sngxt,sngyt);
CYHSMatrix.SetNeedSort(true);
//开始拟合曲线
CYHSMatrix.BeginComPuter();
strtemp :='Y= ' ;
nCount :=High(CYHSMatrix.pEquationPara);
if nCount<6 then
begin
ShowMessage('测量温度的线性值可能有问题,不能得到6次系数');
exit;
end;
if Timer1.Enabled then
begin
Timer1.Enabled :=false;
Button22.Caption :='验证';
Button2.Caption :='读温' ;
end;
Fangcheng6cixishu :=nil;
SetLength(Fangcheng6cixishu,7);

nJingdu := 7;
Edit15.Text := FloatToStr(CYHSMatrix.pEquationPara[0]);
Edit16.Text := FloatToStr(CYHSMatrix.pEquationPara[1]);
Edit17.Text := FloatToStr(CYHSMatrix.pEquationPara[2]);
Edit35.Text := FloatToStr(CYHSMatrix.pEquationPara[3]);
Edit36.Text := FloatToStr(CYHSMatrix.pEquationPara[4]);
Edit37.Text := FloatToStr(CYHSMatrix.pEquationPara[5]);
Edit38.Text := FloatToStr(CYHSMatrix.pEquationPara[6]);
CRCSUM:=500;
for i:=nCount downto 0 do
begin
Fangcheng6cixishu:= CYHSMatrix.pEquationPara;
kk:= CYHSMatrix.pEquationPara;
CRCSUM:=CRCSUM+kk;
end;
bGetXishuFlag :=true;
 
我自己写的一个小单元,如果您修改了,或者改进了请别忘了给我一份。谢谢
 
最小二次拟和的算法很简单的阿,自己照着书写一下吧,用不了几行代码
 
璋㈣阿锛佹垜浼氬敖蹇?瘯璇曘
 
“璋㈣阿锛佹垜浼氬敖蹇?瘯璇曘
 
我想,能否使用:matlab,mathmatice这两款软件的帮助呢?其实我们也需要!
 
to yanghai0437
刚验证了X Y数据多时会出错。
谁有更好的没?
 
这个问题我想持续关注:因为我在做 电力系统的负荷预测
zsp586@sohu.com
qq:42872272
 
我在想,使用matlab,mathematice,mathtool也许是最好的!
 
to 13708782004:
每法集成到我的软件中,要不就是速度上不去!
谁有啊?
 
它支持vc,为什么不通过它建成.dll,不就可以了吗?matlab不慢了!
 

Similar threads

后退
顶部