矩阵加减注意格式
#include <stdioh>
#define maxsize 20
typedef int data;
typedef struct
{
int i,j;
data v;
}mat;
typedef struct
{
int m,n,t;
mat dtt[maxsize+1];
}matrix;
matrix a,b,c;
void transmat(matrix a,matrix b)
{
int p,q,col;
b->m=an;
b->n=am;
b->t=at;
if(at!=0)
{
q=1;
for(col=1;col<=an;col++)
for(p=1;p<=at;p++)
if(adtt[p]j==col)
{
b->dtt[q]j=adtt[p]i;
b->dtt[q]i=adtt[p]j;
b->dtt[q]v=adtt[p]v;
q++;
}
}
}
void creat(matrix x)
{
printf("\nn,m,t=");
scanf("%d,%d,%d",&x->n,&x->m,&x->t);
for(int i=1;i<=x->t;i++)
{
printf("\ni,j,v=");
scanf("%d,%d,%d",&x->dtt[i]i,&x->dtt[i]j,&x->dtt[i]v);
}
}
void mout(matrix x)
{
printf("\nn,m,t=");
printf("%d,%d,%d\n",xn,xm,xt);
for(int i=1;i<=xt;i++)
{
printf("\ni,j,v=");
printf("%d,%d,%d\n",xdtt[i]i,xdtt[i]j,xdtt[i]v);
}
}
void jiajian(matrix x,matrix y,matrix b)
{
int t;
printf("\n1加");
printf("\n2减\n\n");
scanf("%d",&t);
if(t==1)
{
int s=0,j=1,z=1;
b->m=xm;
b->n=xn;
for(int i=1;i<=b->n;i++)
{
for(;j<=xt,z<=yt;)
{
if(xdtt[j]i!=i&&ydtt[z]i!=i)
{
break;
}
else if(xdtt[j]i!=i)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=ydtt[z]j;
b->dtt[s]v=ydtt[z]v;
z++;
}
else if(ydtt[z]i!=i)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=xdtt[j]j;
b->dtt[s]v=xdtt[j]v;
j++;
}
else if(xdtt[j]j>ydtt[z]j)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=ydtt[z]j;
b->dtt[s]v=ydtt[z]v;
z++;
}
else if(xdtt[j]j==ydtt[z]j)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=ydtt[z]j;
b->dtt[s]v=ydtt[z]v+xdtt[j]v;
z++;
j++;
}
else if(xdtt[j]j<ydtt[z]j)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=xdtt[j]j;
b->dtt[s]v=xdtt[j]v;
j++;
}
}
}
b->t=s;
}
else if(t==2)
{
int s=0,j=1,z=1;
b->m=xm;
b->n=xn;
for(int i=1;i<=b->n;i++)
{
for(;j<=xt,z<=yt;)
{
if(xdtt[j]i!=i&&ydtt[z]i!=i)
{
break;
}
else if(xdtt[j]i!=i)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=ydtt[z]j;
b->dtt[s]v=-ydtt[z]v;
z++;
}
else if(ydtt[z]i!=i)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=xdtt[j]j;
b->dtt[s]v=xdtt[j]v;
j++;
}
else if(xdtt[j]j>ydtt[z]j)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=ydtt[z]j;
b->dtt[s]v=-ydtt[z]v;
z++;
}
else if(xdtt[j]j==ydtt[z]j)
{
if(xdtt[j]v-ydtt[z]v!=0)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=ydtt[z]j;
b->dtt[s]v=xdtt[j]v-ydtt[z]v;
}
z++;
j++;
}
else if(xdtt[j]j<ydtt[z]j)
{
s++;
b->dtt[s]i=i;
b->dtt[s]j=xdtt[j]j;
b->dtt[s]v=xdtt[j]v;
j++;
}
}
}
b->t=s;
}
}
int main(int argc, char argv[])
{
printf("1创建\n");
printf("2转置\n");
printf("3矩阵加减\n");
printf("4退出\n");
printf("\n\n\n");
int t;
while(~scanf("%d",&t))
{
if(t==1)
{
creat(&a);
}
else if(t==2)
{
transmat(a,&b);
mout(b);
}
else if(t==3)
{
creat(&c);
jiajian(a,c,&b);
mout(b);
}
else if(t==4)
break;
printf("\n\n\n");
printf("1创建\n");
printf("2转置\n");
printf("3矩阵加减\n");
printf("4退出\n");
printf("\n\n\n");
}
return 0;
}
: 三元表达式比如说bool b=true;int i=b10:20; 先判断b是否为真,如果b为true,i的结果就是10,如果b为false,i的结果就是20给出的程序是结果是10
限制到2位小数,得算好几天吧~就算是整数,一般算法的话,-1000~1000也得好几个小时。我是没时间调试了,我弄了个-100~100的,楼主的CPU如果先进的话,把下面代码中的上限下限改一改试试吧。
代码如下。
====================
Option Explicit
Private Const a = -100 '下限
Private Const b = 100 '上限
Dim x As Integer, y As Integer, z As Integer
Private Sub Form_Load()
Open "d:\1txt" For Output As 1
For x = a To b
For y = a To b
For z = a To b
If x + CSng(y) y + z ^ 3 = 0 Then Print #1, x, y, z
Next
Next
Next
Close
MsgBox "计算完毕,已经输出到D:\1txt ,请查看"
End
End Sub
兄弟,你在fun函数中的t是局部变量,也就是说你并没有为全局变量分配内存。要这样改:
status fun(int t,int v1,int v2,int v3)
{
t=(int )malloc(3sizeof(int));
if(!(t))exit(OVERFLOW);
(t)[0]=v1;(t)[1]=v2;(t)[2]=v3;
return OK;
}
调用时:
fun(&t,v1,v2,v3);
像这种问题Matlab库函数直接可以求解。
编写三个m文件,一个主程序,两个function
主程序mainm
p0=[0 0 0];
A=[];b=[];Aeq=[];beq=[];vlb=[-2;-2;-2];vub=[2;2;2];
[x,fval]=fmincon('fun_u',p0,A,b,Aeq,beq,vlb,vub,'confun_u')
fun_um子函数即目标函数u
function y=fun_u(x)
y= (x(1)-01)^2 + (x(2) - 04)^2 + (x(3) - 03)^2;
约束条件confun_um文件,由于本问题无约束条件,所以该函数这样来写
function [g,ceq]=confun_u(x)
g=-1;
ceq=-1;
执行的时候直接运行main程序即可。当然你可以把mainm也改为一个function,输入参数为目标函数名‘fname’,这时你需要自己定义'fname'的内容。要是不清楚的地方可以继续追问
用fsolve可解出来:
先构造函数:
function output=solveproblem(X)
c=X(1);
m=X(2);
y=X(3);
output(1)=(1-c)(1-y)(1-m)1061+y(1-c)(1-m)3056+c(1-y)(1-m)6067+m(1-c)(1-y)095+ym(1-c)2845+yc(1-m) 819+cm(1-y) 251+c ym 7669-321
output(2)=(1-c)(1-y)(1-m)1521+y(1-c)(1-m)1458+c(1-y)(1-m)652+m(1-c)(1-y)096+ym(1-c)1423+yc(1-m) 1741+cm(1-y) 162+my c8032
output(3)=(1-c)(1-y)(1-m)4477+y(1-c)(1-m)99+c(1-y)(1-m)397+m(1-c)(1-y)078+ym(1-c)08+yc(1-m) 33+cm(1-y) 795+ mcy6679
然后求解:
x0=[1 1 1]; %初值
ans1 = ones(20,3);
options=optimset('fsolve');
for k=1:20
[x,fval,exitflag,output]=fsolve(@solveproblem,x0,options);
x0=x;
ans1(k,:)=x;
end
ans1 =
-02892 09143 01893
带入三个方程验证,分别等于00012,48363e-004,-00016
以上就是关于编写用“三元组表”存储稀疏矩阵,进行矩阵处理的程序。实现(1)矩阵转置 (2)矩阵相加全部的内容,包括:编写用“三元组表”存储稀疏矩阵,进行矩阵处理的程序。实现(1)矩阵转置 (2)矩阵相加、.C#中的三元表达式是什么、求三元方程的解,用vb编一个程序,有知道的,能给我提个思路,或者资料也行。拜谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)