演算法的原理就是類似於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 將所有資料集小於基準的元素放在基準左邊,大於基準的元素放在基準右邊,把原資...