我正在尝试在VHDL中处理LU分解。我是VHDL的入门者。所以我开始在MATLAB中实现LU分解算法。
a = [1 2 2;3 4 4;5 6 6];
x=a;
n=size(x,1);
l=zeros(n,n);
u=zeros(n,n);
for k=1:n
if (a(k,k)~=0)
u(k,k)=x(k,k);
l(k,k)=1;
for i=k+1:n
l(i,k)=x(i,k)/x(k,k);
u(k,i)=x(k,i);
end
for i=k+1:n
for j=k+1:n
x(i,j)=x(i,j)-(l(i,k)*u(k,j));
end
end
else break
end
end
然后我开始没有for循环这样做,因为vhdl中的循环不像matlab那样工作。现在,我正面临着找到级联for循环的等效代码的问题。
a = [1 2 2;3 4 4;5 6 6];
x=a;
n=size(x,1);
l=zeros(n,n);
u=zeros(n,n);
k=1;
m=2;
j=2;
p=2;
for clock=1:100
if k>=1 && k<=n
if (a(k,k)~=0)
u(k,k)=x(k,k);
l(k,k)=1;
else disp('Decomposition not possible')
return
end
if (m>=k+1 && m<=n)
l(m,k)=x(m,k)/x(k,k);
u(k,m)=x(k,m);
m=m+1;
end
if p>=k+1 && p<=n
if j>=k+1 && j<=n
x(p,j)=x(p,j)-(l(p,k)*u(k,j));
j=j+1;
end
if j==n+1
p=p+1;
j=2;
end
end
end
k=k+1;
end
我知道最后一个代码与前一个代码不同。有人可以帮我提一下在VHDL中做这个吗?
答案 0 :(得分:2)
队长明显(标题)救援:
A = [1 2 2;3 4 4;5 6 6];
[L,U] = lu(A);
对于实际的问题,“可以使用if
/ else
而不是for
/ while
实现循环”(不是很虽然很好地反映在标题中):是的,如果语言允许goto
语句,则有可能。循环基本上是(un)条件跳转 back 在语句“stream”中。 MATLAB不是这些语言之一。
在类似C语言中,您可以实现(声明旁边)一个基本for
循环,如下所示:
k = 0;
enter_loop:
if(k < n) {
/* here do in-loop stuff */
k = k+1;
goto enter_loop;
}
注意:您的问题似乎与VHDL有关。为什么不更改问题标签,以便VHDL人员可以直接回答?