MATLAB 與C語言實現追趕法 (托馬斯演算法)

2021-10-22 13:12:40 字數 2278 閱讀 2677

演算法的原理就是類似於lu分解,然後求解線性方程組。具體可以參考

方法一

a = [0,1,1,1]';

b = [4,4,4,4]';

c = [1,1,1]';

x = [1,1,1,0]';

m = zeros(3,1);

n = 4;

c(1) = c(1)/b(1);

x(1) = x(1)/b(1);

for i = 2:n-1

c(i) = c(i)/(b(i)-c(i-1)*a(i));

end for i = 2:n

x(i) = (x(i)-x(i-1)*a(i))/(b(i)-c(i-1)*a(i));

endfor i = n-1:-1:1

x(i) = x(i)-c(i)*x(i+1);

end

方法二 

clear all;clc;

prompt = 'what is the original value? ';

n = input(prompt);

na=zeros(1,n);b=zeros(1,n);c=zeros(1,n-1);

a=zeros(n,n);

for i=1:n

for j=1:n

if j==i

a(i,j)=4;

elseif (j-i==-1)||(j-i==1)

a(i,j)=1;

else

a(i,j)=0;

endend

endfprintf('係數矩陣:');a

fprintf('主對角線元素:');b=diag(a)'

fprintf('第1條對角線元素:');c=diag(a,1)'

fprintf('第-1條對角線元素:');a(2:n)=c

d=[1,1,1,0];%zeros(1,n);d(1)=1;d(n)=((-1)^(n+1));

fprintf('給定的係數矩陣(轉置後):');d

y=zeros(n,1);x=y;

u=zeros(1,n);l=u;%u矩陣u的主對角線元素,l矩陣l的第-1條對角線元素

%---------追過程--------

u(1)=b(1);y(1)=d(1);

for i=2:n

l(i)=a(i)/u(i-1);

u(i)=b(i)-l(i)*c(i-1);

y(i)=d(i)-l(i)*y(i-1);

endfprintf('中間解向量:');y

fprintf('單位下三角陣l的第-1條對角線元素:');l

fprintf('上三角陣u的主對角線元素:')

u=zeros(n);

l=eye(n);

for i=1:n-1

l(i+1,i)=l(i+1);

endfprintf('單位下三角陣:');%單位下三角陣

for i=1:n-1

u(i,i)=u(i);

u(i,i+1)=c(i);

endu(n,n)=u(n);

fprintf('上三角陣:');

%---------趕過程--------

x(n)=y(n)/u(n);

for i=n-1:-1:1

x(i)=(y(i)-c(i)*x(i+1))/u(i);

endfprintf('解向量:');x

c**

#includevoid tdma(float x, const size_t n, const float a, const float b, float c);

int main()

; int i;

const size_t n = 4;

const float a[4] = ;

const float b[4] = ;;

float c[3] = ;

tdma(x ,n,a ,b ,c );

for ( i = 0; i < n; i++)

return 0;

} void tdma(float x, const size_t n, const float a, const float b, float c)

for (n = 1; n < n ; n++)

for (n = n -2; n-- > 0; )

x[n] = x[n] - c[n] * x[n + 1];

}

MATLAB實現追趕法

function x chase method a,b chase method 追趕法求三對角矩陣的解 a為三對角矩陣的係數,b為等式右端的常數項,返回值x即為最終的解 注 a盡量為方陣,b一定要為列向量 求追趕法所需l及u t a for i 2 size t,1 t i,i 1 t i,i 1...

C語言實現分治法

我用了大約三種方法實現,逐漸減少時間複雜度,分別用不同的命名 方式來區分他們,順便列印了那個子區間的和值最大,maxsum 1 用陣列的方式實現三次遍歷,求出所有子串行的和值,並且比較大小,求出最大子串行值 maxsum 2 用另乙個陣列來儲存從下標0開始的所有和值,然後操作次此序列,用減的方式,來...

C語言實現快速排序法(分治法)

分治法的基本思想 將原問題分解為若干個更小的與原問題相似的問題,然後遞迴解決各個子問題,最後再將各個子問題的解組合成原問題的解。利用分治法可以將解決辦法分為 三步走 戰略 1 在資料集中選定乙個元素作為 基準 pivot 2 將所有資料集小於基準的元素放在基準左邊,大於基準的元素放在基準右邊,把原資...