• 前后行数相减，使下行或者上行的首元素为0 print(a, MaxElement, MaxElement + 1 ); } print(a, MaxElement, MaxElement + 1 ); } print(a, MaxElement, MaxElement + 1 ); } for (i = n -...


#include<iostream>
#include<math.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
#define MaxElement  4

void print(double (*pArray)[MaxElement + 1], int iWidth,int iHigh);
void main(){
int n,m;
double a[MaxElement][MaxElement + 1] = {
//3
//         {100, 10, 1, 10},
//         {400, 20, 1, 20},
//         {900, 30, 1, 10},

//4
{1,1,1,1,0},
{1,2,3,4,-6},
{2,6,4,5,-3},
{3,4,-1,6,-12},
};//第四列是增广矩阵
int i,j;
n = MaxElement;
cout<<"输入方程组介数：";
cout<<n<<endl;
cout<<"输入增广矩阵："<<endl;
for(i = 0; i < n; i++){
for(j = 0; j < n + 1;j++){
cout<<a[i][j]<<"  ";
}
cout<<endl;
}
for(j = 0; j < n; j++)
{
double max = 0;
double imax = 0;
for(i = j; i < n; i++)
{
if(imax < fabs(a[i][j])){
imax = fabs(a[i][j]);
max = a[i][j];//得到各行中所在列最大元素
m = i;
}
}
if(fabs(a[j][j]) != max)
{
double b = 0;
for(int k = j;k < n + 1; k++){
b = a[j][k];
a[j][k] = a[m][k];
a[m][k] = b;
}
}
print(a, MaxElement, MaxElement + 1);
for(int r = j;r < n + 1;r++)
{
a[j][r] = a[j][r] / max;//让该行的所在列除以所在列的第一个元素，目的是让首元素为1
}
print(a, MaxElement, MaxElement + 1);
for(i = j + 1;i < n; i++)
{
double c = a[i][j];
if(c == 0) continue;
for(int s = j;s < n + 1;s++){
double tempdata = a[i][s];
a[i][s] = a[i][s] - a[j][s] * c;//前后行数相减，使下一行或者上一行的首元素为0
print(a, MaxElement, MaxElement + 1);
}
print(a, MaxElement, MaxElement + 1);
}
print(a, MaxElement, MaxElement + 1);
}
for(i = n - 2; i >= 0; i--)
{
for(j = i + 1;j < n; j++)
{
double tempData = a[i][j];
double data1 = a[i][n];
double data2 = a[j][n];
a[i][n] = a[i][n] - a[j][n] * a[i][j];
print(a, MaxElement, MaxElement + 1);
}
}
print(a, MaxElement, MaxElement + 1);
cout<<"方程组的解是："<<endl;
for(int k = 0; k < n; k++){
cout<<"x"<<k<<" = "<<a[k][n]<<endl;
}
}
void print(double (*pArray)[MaxElement + 1], int iWidth,int iHigh) {
std::cout<<"Array: "<<"\n";
for(int i = 0; i < iWidth; i++)
{
for(int j = 0; j < iHigh;j++)
{
cout<<pArray[i][j]<<"  ";
}
cout<<endl;
}
}

转载于:https://www.cnblogs.com/profession/p/8385202.html
展开全文
• 基于上一篇博客二元一次方程求解，上面的例子如果能完成，结合官网的资料和其他博主的资料，我相信你已经算入了个门了，后面能不能通过修改上面的例子进行解决更加复杂的问题呢？再看看下一个问题，如果有一个值，它...
基于上一篇博客二元一次方程求解，上面的例子如果能完成，结合官网的资料和其他博主的资料，我相信你已经算入了个门了，后面能不能通过修改上面的例子进行解决更加复杂的问题呢？再看看下一个问题，如果有一个值，它受到 N 个参数的影响，但是每个参数的权重我们并不清楚，我们希望能用刚刚学到的 TensorFlow 来解决这个问题。 首先建立一个模型，表示 N 组数据，具体点，先实现 5 个变量的求解，生成 10 个数据集，我们可以很容易联想到使用大小为 [10,5]的矩阵表示 t_x，使用大小为 [5,1]的矩阵表示参数权重 t_w，使用大小为 [10,1]的矩阵表示结果 t_y，即 t_y = t_x * t_w。 当然，为了更加通用，变量的数量和数据集的数量可以使用常量来表示，矩阵的向量乘法在 numpy 库中使用 dot 函数实现：
test_count = 10         #数据集数量
param_count = 5         #变量数
t_x = np.floor(1000 * np.random.random([test_count,param_count]),dtype=np.float32)

#要求的值
t_w = np.floor(1000 * np.random.random([param_count,1]),dtype=np.float32)

#根据公式 t_y = t_x * t_w 算出值 t_y
t_y = t_x.dot(t_w)

print t_x
print t_w
print t_y与上面的例子一样，我们以 TensorFlow 占位符形式定义输入训练集 x 和 y，矩阵大小可以使用 shape 参数来定义：
#x 是输入量，对应 t_x，用于训练输入，在训练过程中，由外部提供，因此是 placeholder 类型
x = tf.placeholder(tf.float32,shape=[test_count,param_count])
y = tf.placeholder(tf.float32,shape=[test_count,1])
以 TensorFlow 变量形式定义结果 w：
#w 是要求的各个参数的权重，是目标输出，对应 t_w
w = tf.Variable(np.zeros(param_count,dtype=np.float32).reshape((param_count,1)), tf.float32)
定义 TensorFlow 计算结果 y、损失函数 loss 和训练方法：
curr_y = tf.matmul(x, w)                         #实际输出数据
loss = tf.reduce_sum(tf.square(t_y - curr_y))    #损失函数，实际输出数据和训练输出数据的方差之和
train = optimizer.minimize(loss)                 #训练的结果是使得损失函数最小

针对训练次数的问题，我们可以优化一下之前的方式，设定当 loss 函数值低于一定值或者不再变化的时候停止，因为 loss 函数需要在 Session 中使用，它需要使用 TensorFlow 的常量表示：
LOSS_MIN_VALUE = tf.constant(1e-5)               #达到此精度的时候结束训练
模型已经建立完毕，开始训练，我们使用变量 run_count 来记录训练的次数，以 last_loss 记录上一次训练的损失函数的值，初始值为 0。
sess = tf.Session()
sess.run(tf.global_variables_initializer())
run_count = 0
last_loss = 0
训练主循环，将当前的 loss 函数值保存在 curr_loss 中，与上一次相比，如果相同，则退出训练，另外如果 loss 函数低于设定的精度 LOSS_MIN_VALUE，也会退出训练：
while True:
run_count  = 1
sess.run(train, {x:t_x, y:t_y})

curr_loss,is_ok = sess.run([loss,loss < LOSS_MIN_VALUE],{x:t_x, y:t_y})
print "运行%d 次,loss=%s" % (run_count,curr_loss)

if last_loss == curr_loss:
break

last_loss = curr_loss
if is_ok:
break最后打印结果，由于我们知道 t_w 的值是整数，因此将得到的结果四舍五入的值 fix_w 也打印出来，再看看 fix_w 与 t_w 的差距 fix_w_loss 是多少：
curr_W, curr_loss = sess.run([w, loss], {x:t_x,y:t_y})
print("t_w: %snw: %snfix_w: %snloss: %snfix_w_loss:%s" % (t_w, curr_W, np.round(curr_W), curr_loss, np.sum(np.square(t_w - np.round(curr_W)))))

exit(0)
完整代码如下：
#!/usr/bin/python
#coding=utf-8
import tensorflow as tf
import numpy as np

tf.logging.set_verbosity(tf.logging.ERROR)              #日志级别设置成 ERROR，避免干扰
np.set_printoptions(threshold='nan')                    #打印内容不限制长度

test_count = 10         #数据集数量
param_count = 5         #变量数
t_x = np.floor(1000 * np.random.random([test_count,param_count]),dtype=np.float32)

#要求的值
t_w = np.floor(1000 * np.random.random([param_count,1]),dtype=np.float32)

#根据公式 t_y = t_x * t_w 算出值 t_y
t_y = t_x.dot(t_w)

print t_x
print t_w
print t_y

#x 是输入量，对应 t_x，用于训练输入，在训练过程中，由外部提供，因此是 placeholder 类型
x = tf.placeholder(tf.float32,shape=[test_count,param_count])
y = tf.placeholder(tf.float32,shape=[test_count,1])

#w 是要求的各个参数的权重，是目标输出，对应 t_w
w = tf.Variable(np.zeros(param_count,dtype=np.float32).reshape((param_count,1)), tf.float32)

curr_y = tf.matmul(x, w)                         #实际输出数据
loss = tf.reduce_sum(tf.square(t_y - curr_y))    #损失函数，实际输出数据和训练输出数据的方差之和
train = optimizer.minimize(loss)                 #训练的结果是使得损失函数最小

LOSS_MIN_VALUE = tf.constant(1e-5)               #达到此精度的时候结束训练

sess = tf.Session()
sess.run(tf.global_variables_initializer())
run_count = 0
last_loss = 0
while True:
run_count  = 1
sess.run(train, {x:t_x, y:t_y})

curr_loss,is_ok = sess.run([loss,loss < LOSS_MIN_VALUE],{x:t_x, y:t_y})
print "运行%d 次,loss=%s" % (run_count,curr_loss)

if last_loss == curr_loss:
break

last_loss = curr_loss
if is_ok:
break

curr_W, curr_loss = sess.run([w, loss], {x:t_x,y:t_y})
print("t_w: %snw: %snfix_w: %snloss: %snfix_w_loss:%s" % (t_w, curr_W, np.round(curr_W), curr_loss, np.sum(np.square(t_w - np.round(curr_W)))))

exit(0)

运行一下，仍然把头尾的部分记录下来，中间部分太多就省略掉：
\$ python ./test1.py
[[ 842.  453.  586.  919.   91.]
[ 867.  600.  156.  993.  558.]
[ 795.  809.  146.  793.  118.]
[ 202.  184.  125.  132.  450.]
[ 214.   36.  436.  118.  290.]
[ 207.  916.  757.  647.  670.]
[ 679.  176.  872.  522.  927.]
[ 552.  602.  981.  563.  937.]
[  31.  519.  718.  226.  178.]
[ 571.  464.  289.  141.  769.]]
[[  42.]
[ 465.]
[ 890.]
[  84.]
[ 488.]]
[[  889153.]
[  809970.]
[  663711.]
[  435982.]
[  565200.]
[ 1489672.]
[ 1382662.]
[ 1680752.]
[  987505.]
[  884068.]]
运行 1 次,loss=3.30516e 13
运行 2 次,loss=1.02875e 14
运行 3 次,loss=3.22531e 14
运行 4 次,loss=1.01237e 15
运行 5 次,loss=3.17825e 15
运行 6 次,loss=9.97822e 15
运行 7 次,loss=3.13272e 16
运行 8 次,loss=9.83534e 16
运行 9 次,loss=3.08786e 17
运行 10 次,loss=9.69452e 17
运行 11 次,loss=3.04365e 18
运行 12 次,loss=9.55571e 18
运行 13 次,loss=3.00007e 19
运行 14 次,loss=9.41889e 19
运行 15 次,loss=2.95712e 20
...
运行 2821 次,loss=6839.32
运行 2822 次,loss=6780.68
运行 2823 次,loss=6767.86
运行 2824 次,loss=6735.09
运行 2825 次,loss=6709.06
运行 2826 次,loss=6662.66
运行 2827 次,loss=6637.81
运行 2828 次,loss=6637.81
t_w: [[ 117.]
[ 642.]
[ 662.]
[ 318.]
[ 771.]]
w: [[ 117.0872879 ]
[ 641.80706787]
[ 662.05078125]
[ 318.10388184]
[ 771.01501465]]
fix_w: [[ 117.]
[ 642.]
[ 662.]
[ 318.]
[ 771.]]
loss: 6637.81
fix_loss:0.0
可见，这次在执行了 2828 次之后，loss 函数从 3.30516e 13 降低到 6637.81 后不再变动，看起来有点大，但是实际上我们的 y 值也是非常大的，最后求得的结果与实际值有大约不到千分之一的差距，要缩小这个差距，可以通过减少梯度下降学习速率，同时增加训练次数来解决，而 fix_w 的值已经等于 t_w 的值了。 目前这个代码也可以修改一下训练集的数量以及变量的数量，然后通过调梯度下降学习速率参数来进行训练


展开全文
• 问题很简单，有如下N元一次方程，求所有解的集合 X1+2X2+3X3……+nXn = M，其中n和M都是整数 求所有可能的解集。 当然。。。n比较小的情况下，写个n层循环可以解决问题，但是显然不是可取的方法。求助，谢谢。
• 本文实例讲述了C++实现的求解多元一次方程。分享给大家供大家参考，具体如下：注：这里计算的是n*n的等距矩阵，代码如下：#include#include#include#includeusing namespace std;void print(double (*pArray)[4], ...

本文实例讲述了C++实现的求解多元一次方程。分享给大家供大家参考，具体如下：
注：这里计算的是n*n的等距矩阵，代码如下：
#include
#include
#include
#include
using namespace std;
void print(double (*pArray)[4], int iWidth,int iHigh);
void main(){
int n,m;
double a[3][4] = {
{100, 10, 1, 10},
{400, 20, 1, 20},
{900, 30, 1, 10},
};//第四列是增广矩阵
int i,j;
n = 3;
cout<
cout<
cout<
for(i = 0; i < n; i++){
for(j = 0; j < n + 1;j++){
cout<
}

cout<
}

for(j = 0; j < n; j++){

double max = 0;

double imax = 0;

for(i = j; i < n; i++){

if(imax < fabs(a[i][j])){

imax = fabs(a[i][j]);

max = a[i][j];//得到各行中所在列最大元素

m = i;

}

}

if(fabs(a[j][j]) != max) {

double b = 0;

for(int k = j;k < n + 1; k++){

b = a[j][k];

a[j][k] = a[m][k];

a[m][k] = b;

}

}

print(a, 3, 4);

for(int r = j;r < n + 1;r++){

a[j][r] = a[j][r] / max;//让该行的所在列除以所在列的第一个元素，目的是让首元素为1

}

print(a, 3, 4);

for(i = j + 1;i < n; i++){

double c = a[i][j];

if(c == 0) continue;

for(int s = j;s < n + 1;s++){

double tempdata = a[i][s];

a[i][s] = a[i][s] - a[j][s] * c;//前后行数相减，使下一行或者上一行的首元素为0

print(a, 3, 4);

}

print(a, 3, 4);

}

print(a, 3, 4);

}

for(i = n - 2; i >= 0; i--){

for(j = i + 1;j < n; j++){

double tempData = a[i][j];

double data1 = a[i][n];

double data2 = a[j][n];

a[i][n] = a[i][n] - a[j][n] * a[i][j];

print(a, 3, 4);

}

}

print(a, 3, 4);

cout<

for(int k = 0; k < n; k++){

cout<

}

}

void print(double (*pArray)[4], int iWidth,int iHigh) {

std::cout<

for(int i = 0; i < iWidth; i++){

for(int j = 0; j < iHigh;j++){

cout<
}

cout<
}

}

PS：这里再为大家推荐几款计算工具供大家进一步参考借鉴：

在线一元函数(方程)求解计算工具：http://tools.jb51.net/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算：http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器：http://tools.jb51.net/jisuanqi/jsq

希望本文所述对大家C++程序设计有所帮助。


展开全文
• 本文实例讲述了C++实现的求解多元一次方程。分享给大家供大家参考，具体如下：注：这里计算的是n*n的等距矩阵，代码如下：#include#include#include#includeusing namespace std;void print(double (*pArray)[4], ...

本文实例讲述了C++实现的求解多元一次方程。分享给大家供大家参考，具体如下：
注：这里计算的是n*n的等距矩阵，代码如下：
#include
#include
#include
#include
using namespace std;
void print(double (*pArray)[4], int iWidth,int iHigh);
void main(){
int n,m;
double a[3][4] = {
{100, 10, 1, 10},
{400, 20, 1, 20},
{900, 30, 1, 10},
};//第四列是增广矩阵
int i,j;
n = 3;
cout<
cout<
cout<
for(i = 0; i < n; i++){
for(j = 0; j < n + 1;j++){
cout<
}

cout<
}

for(j = 0; j < n; j++){

double max = 0;

double imax = 0;

for(i = j; i < n; i++){

if(imax < fabs(a[i][j])){

imax = fabs(a[i][j]);

max = a[i][j];//得到各行中所在列最大元素

m = i;

}

}

if(fabs(a[j][j]) != max) {

double b = 0;

for(int k = j;k < n + 1; k++){

b = a[j][k];

a[j][k] = a[m][k];

a[m][k] = b;

}

}

print(a, 3, 4);

for(int r = j;r < n + 1;r++){

a[j][r] = a[j][r] / max;//让该行的所在列除以所在列的第一个元素，目的是让首元素为1

}

print(a, 3, 4);

for(i = j + 1;i < n; i++){

double c = a[i][j];

if(c == 0) continue;

for(int s = j;s < n + 1;s++){

double tempdata = a[i][s];

a[i][s] = a[i][s] - a[j][s] * c;//前后行数相减，使下一行或者上一行的首元素为0

print(a, 3, 4);

}

print(a, 3, 4);

}

print(a, 3, 4);

}

for(i = n - 2; i >= 0; i--){

for(j = i + 1;j < n; j++){

double tempData = a[i][j];

double data1 = a[i][n];

double data2 = a[j][n];

a[i][n] = a[i][n] - a[j][n] * a[i][j];

print(a, 3, 4);

}

}

print(a, 3, 4);

cout<

for(int k = 0; k < n; k++){

cout<

}

}

void print(double (*pArray)[4], int iWidth,int iHigh) {

std::cout<

for(int i = 0; i < iWidth; i++){

for(int j = 0; j < iHigh;j++){

cout<
}

cout<
}

}

PS：这里再为大家推荐几款计算工具供大家进一步参考借鉴：

希望本文所述对大家C++程序设计有所帮助。


展开全文
• excel求解多元一次方程。解决用易得易懂的office软件解决线性方程问题。
• 主要介绍了C++实现的求解多元一次方程,涉及C++矩阵运算相关操作技巧,需要的朋友可以参考下
• Excel除了日常的数据统计之外，还可以用来求解一元二次、多元一次方程组的解，手动输入几个数字，即可验算结果是否正确，强烈推荐给辅导孩子数学而头痛的父母们，哈哈！一元二次方程先了解下概念：只含有一个未知数...
• 本文列出了使用Excel中解多元一次方程组的三种方法：矩阵解法、用克莱姆法则和用规划求解的方法。方法一：矩阵解法原理：对于由n个未知数，n个方程组成的多元一次方程组：写成矩阵形式为Ax=b，其中A为系数n*n方阵，x...
• 利用Excl求解多元一次方程.rar, 利用矩阵和矩阵的逆函数，可以用Excel求解多元一次方程，如本例求解的三元一次方程
• 分析：这一道题是四元一次方程，存在两个限制条件：1是要求各种书最少买一本，2是最多剩余2元。那么我们可以先每一种书各买一本，花掉3+5+7+11=26元，还剩44元，这44元可以任意分配，这样就解决了第一个限制条件，...
• 帮朋友写的一个类似解多元一次方程的小程序 例如： 141.72✘x+342.67✘y+97.29✘z+521✘w=26794 根据商品单价和所有商品总价格求每种可以购买商品的数量 商品种类不超过10种，有精确解就打印出来，没有精确解就打印...
• excel求解二元一次、或者多元多次方程组，可以用规划求解，这是大约17年我了解到的方法，也在工作生活中多次用到。 但是书里的方法大不一样。线性代数里的知识在excel里大展拳脚，我当时仿佛看到了新世界。跟着步骤...
• 用于求解多元一次方程组，按照EXCEL提示输入各项系数即可求解
• matlab求解多元一次方程组 问题定义： a11x1+a12x2+…+a1nxn=b1a21x1+a22x2+…+a2nxn=b2⋯am1x1+am2x2+…+amnxn=bm \begin{aligned} &a_{11} x_{1}+a_{12} x_{2}+\ldots+a_{1 n} x_{n}=b_{1}\\ &a_{21} x_{1...
• 解二元一次方程组（可以扩展至解多元多次方程组）解二元一次方程组（可以扩展至解多元多次方程组）解二元一次方程组（可以扩展至解多元多次方程组）解二元一次方程组（可以扩展至解多元多次方程组）
• ## 求解多元一次方程

千次阅读 2018-09-21 12:23:24
有组系数向量A和m， AX = m，求所有可能的X。 解题思路：  x1 = 1:m/a[0]；组合所有的a[1~a.length-1]X = m-a[0]x1; 代码实现：  (A中不含有0) import java.util.LinkedList; public class Main { //...
• 多元一次方程组（二元一次方程组，三元一次方程组，四元一次方程组等）的三种算法，是本人在myeclipse10下编写出来的，并测试成功，很方便调用。希望带给大家惊喜~~
• 使用多元一次方程的 消去法 假设我有三个方程 2a-b+c=3 , 3a+b-c=2 , a-3b+2c=1 对第一个式子我让第一个元素为准（我们这里就叫他标准行吧，先记住这个名字！！！！！！），即a，每个方程同时除以a的系数，就变成了 ...
• 环星多元线性方程组计算器0.89β 界面操作简单，利用线性代数的知识解多软一次方程
• 是不是看到上面题目很头疼，现在我教大家个方法，用代码实现帮我们解方程组，就要用到numpy库里面的solve方法，求解线性方程 先来看看这个方法是怎么使用 我们先导入个包 import Numpy as np np.slove #这样使用...
• 整数多元一次不定方程的矩阵解法与程序设计
• 用函数解多元一次方程
• 目录： 方法一：矩阵解法 ...Excel中解多元一次方程组的三种方法：矩阵解法、克莱姆法则和规划求解的方法，解分段曲线拟合法的系数就能用到。 ----------------------------------------------------------...
• # 符号运算： syms a b c d e p m [a,b,c,d,e,p,m]=solve('a+b+c+d+e=0', 'b+2*c+3*d+4*e-1-p-m=0', 'b+4*c+9*d+16*e-2*p-4*m=0', 'b+8*c+27*d+64*e-3*p-12*m=0', 'b+16*c+81*d+256*e-4*p-32*m=0',...'b+3...
• 那么，如何用集算器来求解这个多元一次方程组呢？首先，需要将方程组整理为标准形式，并把参数填入一个文本文件中，同一行的参数之间用Tab分隔，如下： 如何用编程的方式求解多元一次方程组？常用的方法就是加减...
• python 求解三元一次方程组，三元一次方程组为： k00+k11*2+k22*5=11 k00+k11*7+k22*6=2 k00+k11*6+k22*9=7 demo： from sympy import * k00 = Symbol('k00') k11 = Symbol('k11') k22 = Symbol('k22') # 解三元...
• 很简单的程序，可以接多元一次方程组，在数值计算和线性代数中应用。

...