function [alpha,N,U]=youxianchafen2(r1,r2,up,under,num,deta)
%[alpha,N,U]=youxianchafen2(a,r1,r2,up,under,num,deta)
%該函數(shù)用有限差分法求解有兩種介質(zhì)的正方形區(qū)域的二維拉普拉斯方程的數(shù)值解
%函數(shù)返回迭代因子、迭代次數(shù)以及迭代完成后所求區(qū)域內(nèi)網(wǎng)格節(jié)點(diǎn)處的值
%a為正方形求解區(qū)域的邊長(zhǎng)
%r1,r2分別表示兩種介質(zhì)的電導(dǎo)率
%up,under分別為上下邊界值
%num表示將區(qū)域每邊的網(wǎng)格剖分個(gè)數(shù)
%deta為迭代過(guò)程中所允許的相對(duì)誤差限
n=num+1; %每邊節(jié)點(diǎn)數(shù)
U(n,n)=0; %節(jié)點(diǎn)處數(shù)值矩陣
N=0; %迭代次數(shù)初值
alpha=2/(1+sin(pi/num));%超松弛迭代因子
k=r1/r2; %兩介質(zhì)電導(dǎo)率之比
U(1,1:n)=up; %求解區(qū)域上邊界第一類邊界條件
U(n,1:n)=under; %求解區(qū)域下邊界第一類邊界條件
U(2:num,1)=0;U(2:num,n)=0;
for i=2:num
U(i,2:num)=up-(up-under)/num*(i-1);%采用線性賦值對(duì)上下邊界之間的節(jié)點(diǎn)賦迭代初值
end
G=1;
while G>0 %迭代條件:不滿足相對(duì)誤差限要求的節(jié)點(diǎn)數(shù)目G不為零
Un=U; %完成第n次迭代后所有節(jié)點(diǎn)處的值
G=0; %每完成一次迭代將不滿足相對(duì)誤差限要求的節(jié)點(diǎn)數(shù)目歸零
for j=1:n
for i=2:num
U1=U(i,j); %第n次迭代時(shí)網(wǎng)格節(jié)點(diǎn)處的值
if j==1 %第n+1次迭代左邊界第二類邊界條件
U(i,j)=1/4*(2*U(i,j+1)+U(i-1,j)+U(i+1,j));
end
if (j>1)&&(j U2=1/4*(U(i,j+1)+ U(i-1,j)+ U(i,j-1)+ U(i+1,j));
U(i,j)=U1+alpha*(U2-U1); %引入超松弛迭代因子后的網(wǎng)格節(jié)點(diǎn)處的值
end
if i==n+1-j %第n+1次迭代兩介質(zhì)分界面(與網(wǎng)格對(duì)角線重合)第二類邊界條件
U(i,j)=1/4*(2/(1+k)*(U(i,j+1)+U(i+1,j))+2*k/(1+k)*(U(i-1,j)+U(i,j-1)));
end
if j==n %第n+1次迭代右邊界第二類邊界條件
U(i,n)=1/4*(2*U(i,j-1)+U(i-1,j)+U(i+1,j));
end
end
end
N=N+1 %顯示迭代次數(shù)
Un1=U; %完成第n+1次迭代后所有節(jié)點(diǎn)處的值
err=abs((Un1-Un)./Un1);%第n+1次迭代與第n次迭代所有節(jié)點(diǎn)值的相對(duì)誤差
err(1,1:n)=0; %上邊界節(jié)點(diǎn)相對(duì)誤差置零
err(n,1:n)=0; %下邊界節(jié)點(diǎn)相對(duì)誤差置零
G=sum(sum(err>deta))%顯示每次迭代后不滿足相對(duì)誤差限要求的節(jié)點(diǎn)數(shù)目G
end
標(biāo)簽:
有限差分
上傳時(shí)間:
2018-07-13
上傳用戶:Kemin
本源代碼是基于STM32F4xx硬件平臺(tái)設(shè)計(jì)的貪吃蛇小游戲,主要難點(diǎn)在:隨機(jī)點(diǎn)產(chǎn)生、貪吃蛇轉(zhuǎn)向、貪吃蛇貪吃點(diǎn);本部分主要接收產(chǎn)生隨機(jī)點(diǎn),產(chǎn)生隨機(jī)點(diǎn)需要注意兩個(gè)方面:1、隨機(jī)點(diǎn)在有效的范圍內(nèi);2、貪吃點(diǎn)與貪吃蛇不重合。產(chǎn)生隨機(jī)點(diǎn)主要有兩個(gè)函數(shù),分別如下://隨機(jī)數(shù)產(chǎn)生任務(wù)void rng_chansheng(void *p_arg){OS_ERR err;while(1){OSSemPend(&RNG_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);zou.x = RNG_Get_RandomRange(0,50)*8 + 40;zou.y = RNG_Get_RandomRange(0,50)*8 + 260;lcd_fangkuan(zou.x,zou.y,zou.x+SHE_FAANGKUAN_SIZE,zou.y+SHE_FAANGKUAN_SIZE);OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_HMSM_STRICT,&err); //延時(shí)500ms}}//往下方向畫一個(gè)實(shí)心的正方形,代表貪食蛇的一段void lcd_fangkuan(u16 x1,u16 y1,u16 x2 ,u16 y2){u16 i,j;u16 xx,yy;if(((x2 - x1) != SHE_FAANGKUAN_SIZE)||((y2 - y1) != SHE_FAANGKUAN_SIZE))return ;if(x1 > x2) {xx = x1;x1 = x2;x2 = xx;}if(y1 > y2){yy = y1;y1 = y2;y2 = yy;}if((y1 < 260)|| (y2 > 660)||(x1 < 40)||(x2 > 448)){game_yun_error = 1;LCD_ShowString(150,300,500,24,24,"GAME OVER!!");return ;}for(i=x1; i<x2; i++){for(j=y1; j<y2; j++){LCD_DrawPoint(i,j);}}}
標(biāo)簽:
stm32
ucosiii
貪吃蛇游戲
上傳時(shí)間:
2022-08-10
上傳用戶: