【发布时间】:2020-08-23 05:00:15
【问题描述】:
我有两个功能:
ccexpan - 计算函数f 与N 节点的插值多项式系数,在第一类基的 Chebyshew 多项式中。
csum - 使用来自ccexpan 的系数c 计算参数t 的值(使用Clenshaw 算法)。
这是我目前所写的:
function c = ccexpan(f,N)
z = zeros (1,N+1);
s = zeros (1,N+1);
for i = 1:(N+1)
z(i) = pi*(i-1)/N;
end
t = f(cos(z));
for k = 1:(N+1)
s(k) = sum(t.*cos(z.*(k-1)));
s(k) = s(k)-(f(1)+f(-1)*cos(pi*(k-1)))/2;
end
c = s.*2/N;
和:
function y = csum(t,c)
M = length(t);
N = length(c);
y = t;
b = zeros(1,N+2);
for k = 1:M
for i = N:-1:1
b(i) = c(i)+2*t(k)*b(i+1)-b(i+2);
end
y(k)=(b(1)-b(3))/2;
end
不幸的是,这些程序非常慢,而且还有些不准确。 请给我一些关于如何加快速度以及如何提高准确性的提示。
【问题讨论】:
-
你分析过你的代码吗?
-
@AnderBiguri 不,我不知道它是什么,我是 matlab 新手。
-
它会生成一个报告,告诉你执行时间花在哪里:mathworks.com/help/matlab/matlab_prog/…
-
@Daniel 所以报告说,
csum运行了 40 秒,ccexpan运行了 271 秒,其中 50 秒是“自我时间”。所以我想我应该优化ccexpan? -
该报告还允许您查看函数内部,并知道其中哪些部分需要时间。在某些时候,如果您要运行数百万次,那会很慢。
标签: performance matlab numerical-methods floating-accuracy polynomials