#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <memory.h>
#include <string.h>#include "4TRMUL.c"int m, n, k;
double a[], b[], c[];main()
{
int i, j, k, m, n;
double p[3][3], x[3][1], g[3][1], p0[3][3];
double y[14] = {0.1199,0.2354,0.3440,0.4283,0.5365,0.8354,1.4179,1.8630,1.6040,0.9234,0.5490,0.5818,0.5953,0.3904};
static double h[3][1], hs[1][3];
static double t1[3][1], t2[1][1], t3[3][3];
static double r = 0.000001;
static double I[3][3] = {{1,0,0}, {0,1,0}, {0,0,1}};
static double x0[3][1] = {0,0,0};
static double ht[14][3] =
{
{0.5817,0.0000,0.0000}, {1.1368,0.0001,0.0000},
{1.6729,0.0028,0.0001}, {2.0286,0.0326,0.0024},
{2.0711,0.2218,0.0226}, {1.7145,0.8916,0.1277},
{1.1095,2.1201,0.4276}, {0.5523,2.9823,0.8514},
{0.2105,2.4817,1.0446}, {0.0614,1.2217,0.9803},
{0.0137,0.3558,1.2173}, {0.0023,0.0613,1.8266},
{0.0003,0.0062,1.9631}, {0.0000,0.0004,1.2843}
};
double del = 0.08734; FILE * file;
char data[200];
file = fopen("C:\\data.txt", "w"); for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
p0[i][j] = I[i][j] * del;
}
}
/************************* start ***************************/
for(k = 0; k <= 13; k++)
{
for (i = 0; i <= 2; i++)
{
h[i][0] = ht[k][i];
}
trmul(p0, h, 3, 3, 1, t1);
for (i = 0; i <= 2; i++)
{
hs[0][i] = h[i][0];
}
trmul(hs, t1, 1, 3, 1, t2);
for(i = 0; i <= 2; i++)
{
g[i][0] = t1[i][0] / (t2[0][0] + r);
}
trmul (g, hs, 3, 1, 3, t3);
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
t3[i][j] = I[i][j] - t3[i][j];
}
}
trmul (t3, p0, 3, 3, 3, p);
trmul (hs, x0, 1, 3, 1, t2);
t2[0][0] = y[k] - t2[0][0];
for (i = 0; i <= 2; i++)
{
x[i][0] = x0[i][0] + (g[i][0] * t2[0][0]);
}
for (i = 0; i <= 2; i++)
{
x0[i][0] = x[i][0];
}
for (i = 0; i <= 2; i++)
{
for(j = 0; j <= 2; j++)
{
p0[i][j] = p[i][j];
}
}
printf (" %e %e %e\n", x0[0][0], x0[1][0], x0[2][0]);
printf("\n");
memset(data, NULL, sizeof(data));
sprintf(data, "%d\t%e\t%e\t%e\n", k+1, x0[0][0], x0[1][0], x0[2][0]);
fwrite(data, strlen(data), 1, file);
}
fclose(file);
printf("\n\n");
}
//////////////////////////////
//4TRMUL.c
void trmul(a, b, m, n, k, c)
int m, n, k;
double a[], b[], c[];
{
int i, j, l, u;
for(i = 0; i <= m - 1; i++)
{
for(j = 0; j <= k - 1; j++)
{
u = i * k + j;
c[u] = 0.0; for(l = 0; l <= n - 1; l++)
{
c[u] = c[u] + a[i * n + l] * b[l * k + j];
}
}
}
return;
}
#include <stdlib.h>
#include <math.h>
#include <memory.h>
#include <string.h>#include "4TRMUL.c"int m, n, k;
double a[], b[], c[];main()
{
int i, j, k, m, n;
double p[3][3], x[3][1], g[3][1], p0[3][3];
double y[14] = {0.1199,0.2354,0.3440,0.4283,0.5365,0.8354,1.4179,1.8630,1.6040,0.9234,0.5490,0.5818,0.5953,0.3904};
static double h[3][1], hs[1][3];
static double t1[3][1], t2[1][1], t3[3][3];
static double r = 0.000001;
static double I[3][3] = {{1,0,0}, {0,1,0}, {0,0,1}};
static double x0[3][1] = {0,0,0};
static double ht[14][3] =
{
{0.5817,0.0000,0.0000}, {1.1368,0.0001,0.0000},
{1.6729,0.0028,0.0001}, {2.0286,0.0326,0.0024},
{2.0711,0.2218,0.0226}, {1.7145,0.8916,0.1277},
{1.1095,2.1201,0.4276}, {0.5523,2.9823,0.8514},
{0.2105,2.4817,1.0446}, {0.0614,1.2217,0.9803},
{0.0137,0.3558,1.2173}, {0.0023,0.0613,1.8266},
{0.0003,0.0062,1.9631}, {0.0000,0.0004,1.2843}
};
double del = 0.08734; FILE * file;
char data[200];
file = fopen("C:\\data.txt", "w"); for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
p0[i][j] = I[i][j] * del;
}
}
/************************* start ***************************/
for(k = 0; k <= 13; k++)
{
for (i = 0; i <= 2; i++)
{
h[i][0] = ht[k][i];
}
trmul(p0, h, 3, 3, 1, t1);
for (i = 0; i <= 2; i++)
{
hs[0][i] = h[i][0];
}
trmul(hs, t1, 1, 3, 1, t2);
for(i = 0; i <= 2; i++)
{
g[i][0] = t1[i][0] / (t2[0][0] + r);
}
trmul (g, hs, 3, 1, 3, t3);
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
t3[i][j] = I[i][j] - t3[i][j];
}
}
trmul (t3, p0, 3, 3, 3, p);
trmul (hs, x0, 1, 3, 1, t2);
t2[0][0] = y[k] - t2[0][0];
for (i = 0; i <= 2; i++)
{
x[i][0] = x0[i][0] + (g[i][0] * t2[0][0]);
}
for (i = 0; i <= 2; i++)
{
x0[i][0] = x[i][0];
}
for (i = 0; i <= 2; i++)
{
for(j = 0; j <= 2; j++)
{
p0[i][j] = p[i][j];
}
}
printf (" %e %e %e\n", x0[0][0], x0[1][0], x0[2][0]);
printf("\n");
memset(data, NULL, sizeof(data));
sprintf(data, "%d\t%e\t%e\t%e\n", k+1, x0[0][0], x0[1][0], x0[2][0]);
fwrite(data, strlen(data), 1, file);
}
fclose(file);
printf("\n\n");
}
//////////////////////////////
//4TRMUL.c
void trmul(a, b, m, n, k, c)
int m, n, k;
double a[], b[], c[];
{
int i, j, l, u;
for(i = 0; i <= m - 1; i++)
{
for(j = 0; j <= k - 1; j++)
{
u = i * k + j;
c[u] = 0.0; for(l = 0; l <= n - 1; l++)
{
c[u] = c[u] + a[i * n + l] * b[l * k + j];
}
}
}
return;
}
解决方案 »
- 用ActiveX把webBrowser包装一下,一些不懂地方。
- CEditView UnlockWindowUpdate()之后闪烁的问题
- 数字图像处理在工业中的应用???
- 关于SysAllocString((BSTR) "ABC")转换的问题?
- 学Win32到什么程度就可以应付MFC的学习了?
- Clist问题
- 为什么控件会被覆盖?
- 关于VC++中exp里做虚数运算
- 如何得到一个文件夹下,所有文件和子文件夹的名称。象资源管理器一样。
- 菜鸟问题: 如何在程序的任何一个角落激活和关闭主menu的某个item ID?
- 求网络通讯课题,小弟想找点事做做,要有趣而不失难度 :)
- [刚刚学VC的]字符串和数字的互相转化问题。
2.程序中没有复杂的语法,除了double指针的隐式转换,其它没有难点(只是计算而已)
3.如果真要用C++编译,改成以下的就可以了(VC下与原结果相同)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <memory.h>
#include <string.h>void trmul(double *a, double *b,int m, int n, int k, double *c)
{
int i, j, l, u;
for(i = 0; i <= m - 1; i++)
{
for(j = 0; j <= k - 1; j++)
{
u = i * k + j;
c[u] = 0.0; for(l = 0; l <= n - 1; l++)
{
c[u] = c[u] + a[i * n + l] * b[l * k + j];
}
}
}
return;
}
//int m, n, k;
//double a[], b[], c[];main()
{
int i, j, k, m, n;
double p[3][3], x[3][1], g[3][1], p0[3][3];
double y[14] = {0.1199,0.2354,0.3440,0.4283,0.5365,0.8354,1.4179,1.8630,1.6040,0.9234,0.5490,0.5818,0.5953,0.3904};
static double h[3][1], hs[1][3];
static double t1[3][1], t2[1][1], t3[3][3];
static double r = 0.000001;
static double I[3][3] = {{1,0,0}, {0,1,0}, {0,0,1}};
static double x0[3][1] = {0,0,0};
static double ht[14][3] =
{
{0.5817,0.0000,0.0000}, {1.1368,0.0001,0.0000},
{1.6729,0.0028,0.0001}, {2.0286,0.0326,0.0024},
{2.0711,0.2218,0.0226}, {1.7145,0.8916,0.1277},
{1.1095,2.1201,0.4276}, {0.5523,2.9823,0.8514},
{0.2105,2.4817,1.0446}, {0.0614,1.2217,0.9803},
{0.0137,0.3558,1.2173}, {0.0023,0.0613,1.8266},
{0.0003,0.0062,1.9631}, {0.0000,0.0004,1.2843}
};
double del = 0.08734; FILE * file;
char data[200];
file = fopen("C:\\data.txt", "w"); for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
p0[i][j] = I[i][j] * del;
}
}
/************************* start ***************************/
for(k = 0; k <= 13; k++)
{
for (i = 0; i <= 2; i++)
{
h[i][0] = ht[k][i];
}
trmul((double *)p0, (double *)h, 3, 3, 1, (double *)t1);
for (i = 0; i <= 2; i++)
{
hs[0][i] = h[i][0];
}
trmul((double *)hs, (double *)t1, 1, 3, 1, (double *)t2);
for(i = 0; i <= 2; i++)
{
g[i][0] = t1[i][0] / (t2[0][0] + r);
}
trmul ((double *)g, (double *)hs, 3, 1, 3, (double *)t3);
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
t3[i][j] = I[i][j] - t3[i][j];
}
}
trmul ((double *)t3, (double *)p0, 3, 3, 3,(double *) p);
trmul ((double *)hs, (double *)x0, 1, 3, 1, (double *)t2);
t2[0][0] = y[k] - t2[0][0];
for (i = 0; i <= 2; i++)
{
x[i][0] = x0[i][0] + (g[i][0] * t2[0][0]);
}
for (i = 0; i <= 2; i++)
{
x0[i][0] = x[i][0];
}
for (i = 0; i <= 2; i++)
{
for(j = 0; j <= 2; j++)
{
p0[i][j] = p[i][j];
}
}
printf (" %e %e %e\n", x0[0][0], x0[1][0], x0[2][0]);
printf("\n");
memset(data, NULL, sizeof(data));
sprintf(data, "%d\t%e\t%e\t%e\n", k+1, x0[0][0], x0[1][0], x0[2][0]);
fwrite(data, strlen(data), 1, file);
}
fclose(file);
printf("\n\n");
}
不清晰
偶C学得不好
一般都是stan的C++那种写法