Ⅰ matlab實現歐拉法和RK-4方法的數值計算
程序已經寫了,不過步長你得自己調,當步長較小時,計算時間會很長
另外,tend是時間的終值,你可以設小一些。因為解析解為10*cos(x),我設成pi,就是計算半個周期。
x''(t)=-x(t)
引入y1=x,y2=x',則
y1'=y2
y2'=-x=-y1
初始條件為:
y1(0)=10;
y2(0)=0;
將下面兩行百分號之間的內容,保存成DiffEulerRk4.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function MaxDiffX=DiffEulerRk4(dt,PlotFlag)
%dt是步長
%PlotFlag是否作圖
if nargin<1
dt=0.01;
end
if nargin<2
PlotFlag=0;
end
f=inline('[y(2);-y(1)]','t','y'); %微分方程的右邊項
t0=0; %初始時刻
tend=pi; %計算的點數
tt=t0:dt:tend; %一系列離散的點
N=length(tt); %點數
y0=[10;0];
%%(1)歐拉法
EulerY=y0;
for i=2:N
EulerY(:,i)=EulerY(:,i-1)+dt*f(tt(i-1),EulerY(:,i-1));
end
EulerX=EulerY(1,:); %取x
%%(2)龍格庫塔法
RkY=y0;
for i=2:N
k1=f(tt(i-1), RkY(:,i-1));
k2=f(tt(i-1)+dt/2, RkY(:,i-1)+k1*dt/2);
k3=f(tt(i-1)+dt/2, RkY(:,i-1)+k2*dt/2);
k4=f(tt(i-1)+dt, RkY(:,i-1)+k3*dt);
RkY(:,i)=RkY(:,i-1)+(k1+2*k2+2*k3+k4)*dt/6;
end
RkX=RkY(1,:); %取x
%精確解
syms t
analytic=dsolve('D2x=-x','x(0)=10','Dx(0)=0','t');
rightdata=subs(analytic,t,tt);
if PlotFlag
plot(tt,EulerX,'b-',tt,RkX,'r--',tt,rightdata,'g-.')
legend('Euler','Runge-Kutta','analytic')
end
MaxDiffX=[max(abs(RkX-rightdata)),max(abs(EulerX-rightdata))];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
所有題,都得你自己調步長。
輸入:
DiffEulerRk4(0.01,1) %步長取0.01的計算結果,參數為1代表作圖,自己得修改步長
%%下面是變化
Error=[];
Dt=[5e-4,1e-3,2e-3,5e-3,0.01,0.05,0.1];
for dt=Dt %幾種步長,自行修改
dt %查看dt,步長小,計算量大
Error_1=DiffEulerRk4(dt); %不作圖
Error=[Error;Error_1]; %保存歐拉法誤差
end
semilogx(Dt,Error)
legend('Euler','RK4')
xlabel('步長')
ylabel('誤差')
title('與理論值誤差')
Ⅱ 魔獸世界1.12單機如何改經驗倍率
拜託 魔獸世界 要的就是多人一起玩的那種爽 你玩單機 快來魔獸世界 4區 希爾瓦納絲
Ⅲ 通達信的選股公式,提示:輸出不能超過1個。誰能給修改i啊下。謝謝~~
{底背離選股}
N:=1;
SHORT:=12*N;
LONG:=29*N;
M:=9*N;
DIFF:=EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA:=EMA(DIFF,M);
MACD:=2*(DIFF-DEA);
{以下處理底背離}
N1:=BARSLAST(MACD<0);{綠柱天數}
N2:=REF(BARSLAST(MACD>0),N1);{綠柱前紅柱天數}
N3:=REF(BARSLAST(MACD<0),N2+N1);{紅柱前綠柱天數}
MINMD1:=LLV(MACD,N1);
MINMD3:=REF(LLV(MACD,N3+N2),N1);
MINDIFF1:=LLV(DIFF,N1);
MINDIFF3:=REF(LLV(DIFF,N2+N3),N1);
MINDEA1:=LLV(DEA,N1);
MINDEA3:=REF(LLV(DEA,N2+N3),N1);
股價L1:=LLV(L,N1);
股價LL:=LLV(L,N1+N2+N3);
綠柱縮短:=MACD<0 AND MACD>REF(MACD,1) AND REF(MACD,1)<REF(MACD,2);
MACD底背離:=MACD<0 AND MINMD1>MINMD3;
DIFF底背離:=DIFF<0 AND MINDIFF1>MINDIFF3;
DEA底背離:=DEA<0 AND MINDEA1>MINDEA3;
股價新低:=股價L1=股價LL;
底背離:綠柱縮短 AND MACD底背離 AND DIFF底背離 AND DEA底背離 AND 股價新低;
=========================
{頂背離選股}
N:=1;
SHORT:=12*N;
LONG:=29*N;
M:=9*N;
DIFF:=EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);
DEA:=EMA(DIFF,M);
MACD:=2*(DIFF-DEA);
M1:=BARSLAST(MACD>0);{ 紅柱天數}
M2:=REF(BARSLAST(MACD<0),M1); {紅柱前綠柱天數}
M3:=REF(BARSLAST(MACD>0),M2+M1); {綠柱前紅柱天數}
MAXMD1:=HHV(MACD,M1);
MAXMD3:=REF(HHV(MACD,M3+M2),M1);
MAXDIFF1:=HHV(DIFF,M1);
MAXDIFF3:=REF(HHV(DIFF,M2+M3),M1);
MAXDEA1:=HHV(DEA,M1);
MAXDEA3:=REF(HHV(DEA,M2+M3),M1);
股價H1:=HHV(H,M1);
股價HH:=HHV(H,M1+M2+M3);
紅柱縮短:=MACD>0 AND MACD<REF(MACD,1) AND REF(MACD,1)>REF(MACD,2);
MACD頂背離:=MACD>0 AND MAXMD1<MAXMD3;
DIFF頂背離:=DIFF>0 AND MAXDIFF1<MAXDIFF3;
DEA頂背離:=DEA>0 AND MAXDEA1<MAXDEA3;
股價新高:=股價H1=股價HH;
頂背離:紅柱縮短 AND MACD頂背離 AND 股價新高;
Ⅳ 面試題:求數組中兩個數的最大差值(只能下標大的減去
int FindMaxDiff(int *p, int n)
{
int max, min, max_record, min_record;
int i;
int *cur;
max = -999999; // 先弄一個最小值
min = 999999; // 先弄一個最大值
cur = p;
for (i = 0; i < n; ++i, ++cur)
{
if ((*cur) >= max)
{
max = (*cur);
min = max;
}
else if ((*cur) <= min)
{
min = (*cur);
}
else
{
continue;
}
if ((max - min) < (max_record - min_record))
{
continue;
}
max_record = max;
min_record = min;
}
printf("A: %d, B: %d, maxdiff: %d\n", max_record, min_record, max_record - min_record);
return max_record - min_record;
}
int main(void)
{
int ar[] = {12, 2, 4, -3, 25, 19, 27};
FindMaxDiff(ar, 7);
return 1;
}
只有一次循環,記錄「按順序」的最大最小,輸出是調試信息,你不要可以刪除掉。
輸出如下:
A: 12, B: -3, maxdiff: 15
Ⅳ 請幫忙把下面大智慧公式轉換成通達信公式,謝謝!
大智慧的公式沒有必要轉化成通達信的!!!原因很簡單:通達信的選股功能選出的股票不如大智慧精確!!!
Ⅵ matlab中的fitoption得出的各參數的意義,具體什麼用的
Normalize: 對數據歸一化處理
Exclude: 排除數據
Weights: 加權
Method: 擬合方法, 非線性最小二乘法
Robust: 穩健方式(通過加權方式排除異常值影響)
StartPoint: 擬合開始點
Lower: 擬合參數下界
Upper: 擬合參數上界
Algorithm: 演算法 '置信區間'
DiffMinChange: 差分時參數最小變化值
DiffMaxChange: 差分時參數最大變化值
Display: 顯示通知
MaxFunEvals: 最大函數計算次數
MaxIter: 最大迭代次數
TolFun: 函數精度
TolX: 參數精度
如果上面看不懂的話,得找一本數值分析的書來看,很多概念不是一兩句話能說清楚的