写3个函数M文件程序,分别实现下述功能希尔伯特矩阵是一种数学变换矩阵,满足其元素A(i,j)=1/(i+j-1),i,j分别为其行标和列标,现在编写以你名字命名的一个双自变量函数(输入变量有2个),可以生成任意的希尔伯特矩阵,该矩阵中的元素以分数表示;提示:函数的作用是要生成一个矩阵,因此function a=litao(m,n),a代表希尔伯特矩阵m和n代表行和列,因此在第一节课讲的双循环遍历中,应该把两个for循环的上界改为自变量m和n;将小数转为分数的命令是rats(自行百度rats函数如何使用,整个程序十分简单,只有8行,不用想太复杂)
时间: 2023-04-04 17:03:09 浏览: 144
我可以回答这个问题。以下是三个函数M文件程序的实现:
1. litao.m
function a = litao(m,n)
a = zeros(m,n);
for i = 1:m
for j = 1:n
a(i,j) = rats(1/((i-1)*(j-1)+1));
end
end
2. rats.m
function [num,den] = rats(x)
tol = 1e-6;
if abs(x-round(x)) < tol
num = round(x);
den = 1;
return
end
n = 1;
while abs(x-round(x)) > tol && n < 100
n = n+1;
[num,den] = rat(x,n);
end
if n == 100
num = NaN;
den = NaN;
disp('Conversion failed')
end
3. rat.m
function [num,den] = rat(x,n)
a = floor(x);
if n == 1
num = a;
den = 1;
return
end
p = [1 0];
q = [a 1];
for i = 2:n
r = 1/(x-a);
b = floor(r);
a = a+b;
p = [p(2) p(1)+b*p(2)];
q = [q(2) q(1)+b*q(2)];
r = r-b;
if abs(r) < eps
break
end
end
num = p(end);
den = q(end);
注意,这三个函数M文件程序是用来生成任意的希尔伯特矩阵,其中的元素以分数表示。函数litao的作用是生成一个矩阵,因此输入变量有两个,分别代表矩阵的行和列。在双循环遍历中,应该把两个for循环的上界改为自变量m和n。将小数转为分数的命令是rats,可以自行百度如何使用。整个程序十分简单,只有8行,不用想太复杂。
阅读全文