小编Los*_*ost的帖子

如何以比以下更好的方式打印每个 t=1000 处的值?

考虑:

dt=10**(-3)
for i in range(1,10**7+1):
    t=i*dt;
    kounter=e**(t*(dt**3))
    if t==1000 or t==2000 or t==3000 or t==4000 or t==5000 or t==6000:
        print(kounter)   
Run Code Online (Sandbox Code Playgroud)

现在上面的代码本身可能会以一种无限更好的方式编写,但这只是为了展示我想要在实际代码中做什么,其中我想在每 1000 步打印变量的值直到最后(请注意上面我只做到了 6000,但我想要直到 10,000)如果结束时间非常长,这看起来很荒谬。

我确信有一种更漂亮、更有效的方法来做到这一点。

python for-loop if-statement

2
推荐指数
1
解决办法
832
查看次数

以下代码中是否可以避免这些舍入错误?

我正在尝试在 Matlab 中编写一个程序来使用 LU 分解求解线性方程组,该分解采用高斯消元法,因此需要大量算术步骤。

答案接近正确的解决方案,但与 Python 等其他语言相比,舍入误差相当高。

例如,其中一个解恰好是 3,但我得到 2.9877。

我知道内置函数应该用于此类琐碎的事情,因为 Matlab 是一种高计算语言,但如果我仍然想用循环等来完成它,我总是会遇到舍入错误,或者有没有办法在做时减少这些错误数值计算?

我附上了代码,但它很大,不值得阅读。为了完整起见,我仍然附上了它。人们可以注意到许多算术运算的使用会引入大量舍入误差。

这些舍入误差是 Matlab 固有的且不可避免的吗?

clc
clear
%No of equations is n
n=3;
%WRITING THE Coefficients
A(1,1)=3;
A(1,2)=-0.1;
A(1,3)=-0.2;
B(1)=7.85;

A(2,1)=0.1;
A(2,2)=7;
A(2,3)=-0.3;
B(2)=-19.3;

A(3,1)=0.3;
A(3,2)=-0.2;
A(3,3)=10;
B(3)=71.4;
%Forward Elimination
for i=1:n-1
  for j=i+1:n
    fact=A(j,i)/A(i,i);
    A(j,i)=fact;
    
    A(j,j:n)=A(j,j:n)-fact*A(i,j:n);
    B(j)=B(j)-fact*B(i);
  end
end
disp(A)
% Calculating d matrix
sum=0;
D(1)=B(1);
for i=2:n
  for j=1:i-1
    sum=sum+A(i,j)*B(j);
    D(i)=B(i)-sum;
  end
end
disp("D =")
disp(transpose(D))

%Back Substitution
X(n)=D(n)/A(n,n);
for z=n-1:-1:1
  sum=0;
  for w=z+1:n
    sum=sum+A(z,w)*X(w); …
Run Code Online (Sandbox Code Playgroud)

matlab matrix linear-algebra rounding numerical-methods

0
推荐指数
1
解决办法
89
查看次数