一元多次不等式

思路 二分
先找到一个大致区间,然后二分出结果

二分解决多元一次不等式hdu2199

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
//bool ishigh(double a,double b){//  if(8*pow(a,4)+7*pow(a,3)+2*pow(a,2)+3*a+6>b){return true;}
//  else return false;
//}
double compute(double a){return 8*pow(a,4)+7*pow(a,3)+2*pow(a,2)+3*a+6;
}
int main(){int T;cin>>T;while(T--){int stand;cin>>stand;double left=0,right=100,mid;if(compute(left)<=stand&&compute(right)>=stand){for(int i=0;;i++){mid=(left+right)*0.5;if(compute(mid)<stand){left=mid;}else{right=mid;}if(right-left<1e-8){break;}}cout<<fixed<<setprecision(4)<<mid<<endl;}else{cout<<"No solution!"<<endl;}}
}

多元一次方程组

解决办法:克拉默法则

思路:

  • n元一次方程组的系数储存在一个二维数组中
  • 计算方程组的常数的行列式的值
  • 分别计算每个用常数列替换之后的行列式的值再与第二步计算出来的作比即可。
  • 计算行列式的值用代数余子式,然后代数余子式要用递归,到最后二阶行列式跳出递归即可

解题中间碰到的问题:
在解决计算一个行列式的值的时候,需要用到递归,然后传一个系数矩阵进入函数,

  • 然后最一开始是打算利用指针,把系数矩阵的地址传进去,但是尝试了很多方法,都没有解决。
  • 然后想到直接利用当前要计算的行列式在原来的系数矩阵的位置(即传入左上角右下角就可以勾勒出要计算的行列式),但是这种方法不适用于后面求解的把行列式中的某一列用常数矩阵替换来传入求行列式的值
  • 最后想到了vector来储存二维数据,直接把二维向量作为参数传进函数。(也顺带解决了后面拼接系数矩阵的问题)(向量nb~

还没来得及删注释的代码:

//
//  main.cpp
//  solve
//
//  Created by 陈冉飞 on 2019/10/26.
//  Copyright © 2019 陈冉飞. All rights reserved.
//#include <iostream>
using namespace std;
#define maxn 10010
int n;
//double a[maxn][maxn],var[maxn][maxn],con[maxn];  //n为自变量的数量
#include <vector>
vector<vector<double>>a;
vector<vector<double>>var;
vector<double>con;//递归计算矩阵的值
double cal(vector<vector<double>> tem){//    cout<<tem.size()<<endl;double ans = 0;int temsize = tem.size();if (tem.size() == 2) return tem[0][0]*tem[1][1]-tem[1][0]*tem[0][1];//如果不是2*2,则用代数余子式,提取出最左边的第一列,从第一个开始算余子式for (int i = 0; i < tem.size(); i++) {vector<vector<double>> nttem;for (int j = 0; j < temsize; j++)if (i-j) {vector<double> inner;for (int k = 1; k < temsize; k++) inner.push_back(tem[j][k]);nttem.push_back(inner);}if (i%2) ans += tem[i][0]*cal(nttem);else ans -= tem[i][0]*cal(nttem);}
//    for (int i = 0; i < tem.size(); i++) {//        for (int j = 0; j < tem[i].size(); j++) {//            printf("%lf ",tem[i][j]);
//        }
//        printf("\n");
//    }return ans;
}void solve(){//init var convar.resize(n);for (int i = 0; i < n; i++) {var[i].resize(n);for (int j = 0; j < n; j++) {var[i][j] = a[i][j];}con.push_back(a[i][n]);}
//    for (int i = 0; i < con.size(); i++) printf("%lf ",con[i]);//特判系数矩阵的值是否为零if (!cal(var)) {cout<<"No answer"<<endl;return;}else {//        cout<<"111"<<endl;for (int i = 0; i < n; i++) {//            cout<<"222"<<endl;vector<vector<double>> change;for (int j = 0; j < n; j++) {//                cout<<"333"<<endl;vector<double> inner_change;for (int k = 0; k < n; k++) {if (k == i) inner_change.push_back(con[j]);else inner_change.push_back(var[j][k]);}change.push_back(inner_change);}cout<<"第"<<i<<"个解为"<<cal(change)/cal(var)<<endl;}}
//    cout<<cal(var)<<endl;;
}int main(int argc, const char * argv[]) {double tem;while (scanf("%d",&n) && n) {a.resize(n);for (int i = 0; i < n; i++){a[i].resize(n+1);for (int j = 0; j < n+1; j++) {scanf("%lf",&tem);a[i][j] = tem;}}solve();}return 0;
}

删一下多余的注释来个简洁版:

//
//  main.cpp
//  solve
//
//  Created by 陈冉飞 on 2019/10/26.
//  Copyright © 2019 陈冉飞. All rights reserved.
//#include <iostream>
using namespace std;
#define maxn 10010
int n;
#include <vector>
vector<vector<double>>a;
vector<vector<double>>var;
vector<double>con;//递归计算矩阵的值
double cal(vector<vector<double>> tem){double ans = 0;int temsize = tem.size();if (tem.size() == 2) return tem[0][0]*tem[1][1]-tem[1][0]*tem[0][1];//如果不是2*2,则用代数余子式,提取出最左边的第一列,从第一个开始算余子式for (int i = 0; i < tem.size(); i++) {vector<vector<double>> nttem;for (int j = 0; j < temsize; j++)if (i-j) {vector<double> inner;for (int k = 1; k < temsize; k++) inner.push_back(tem[j][k]);nttem.push_back(inner);}if (i%2) ans += tem[i][0]*cal(nttem);else ans -= tem[i][0]*cal(nttem);}return ans;
}void solve(){//init var convar.resize(n);for (int i = 0; i < n; i++) {var[i].resize(n);for (int j = 0; j < n; j++) {var[i][j] = a[i][j];}con.push_back(a[i][n]);}//特判系数矩阵的值是否为零if (!cal(var)) {cout<<"No answer"<<endl;return;}else {for (int i = 0; i < n; i++) {vector<vector<double>> change;for (int j = 0; j < n; j++) {vector<double> inner_change;for (int k = 0; k < n; k++) {if (k == i) inner_change.push_back(con[j]);else inner_change.push_back(var[j][k]);}change.push_back(inner_change);}cout<<"第"<<i<<"个解为"<<cal(change)/cal(var)<<endl;}}
}int main(int argc, const char * argv[]) {double tem;while (scanf("%d",&n) && n) {a.resize(n);for (int i = 0; i < n; i++){a[i].resize(n+1);for (int j = 0; j < n+1; j++) {scanf("%lf",&tem);a[i][j] = tem;}}solve();}return 0;
}

C++解决一元多次不等式和多元一次不等式相关推荐

  1. 最优化之凸集、凸函数、上确界、Jensen不等式、共轭函数、Fenchel不等式、拉格朗日乘子法、KKT条件

    最优化之凸集.凸函数.上确界.Jensen不等式.共轭函数.Fenchel不等式.拉格朗日乘子法.KKT条件.拉格朗日对偶 1.直线的向量表达 1.1 共线定理 对于任意两个向量a⃗,b⃗\vec{a ...

  2. matlab中计算不等式的解,matlab解不等式

    MATLAB求解非线性规划good (1)_理学_高等教育_教育专区.数学建模课... x4 ? x5 MATLAB 程序如下: f=[1; 2; 3; 1; 1]; intcon=[1 2 3 4 ...

  3. 不等号属于不等式吗_什么是不等式

    不等式() 用不等号将2个剖析式连结起來所成的式子.比如2x+2y≥2xy,sinx≤1,ex> 0 ,2x<3等 . 依据剖析式的归类也可对不等式归类,不等号两侧的剖析式都是代数式的不等 ...

  4. 4个基本不等式的公式高中_不等式链(高中4个基本不等式链推导)

    高中数学基本不等式链如下:算术平均数( arithmetic mean),又称均值,是统计学中最基本.最常用的一种平均指标,分为简单算术平均数.加权算术平均数.它主要. 几个不等式联立起来,叫做不等式 ...

  5. 切比雪夫不等式例题讲解_排序不等式,切比雪夫不等式及伯努利不等式

    我们比较熟悉的不等式可能就是下面的这个不等式链以及柯西不等式了: 对于不等式链的证明我们可以看下面这张图,非常直观形象: 不太懂得也可以看这个视频讲解: 知乎视频​www.zhihu.com 对于柯西 ...

  6. 赫德尔不等式泰纽斯基不等式

    赫德尔不等式&&泰纽斯基不等式

  7. c语言解决一元二次方程,一元二次方程求解程序完整代码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面的代码是我刚才无聊写的.对于简单的一元多次方程的迭代 #include #include #include #define MAXTIMES 5 ty ...

  8. python解决一元二次方程

    题目:求一元二次方程ax*x+b*x+c=0的解 从键盘输入a,b,c的值,分多种情况输出解. a等于0,b也等于0时,输出"方程无解": a等于0,b不等于0时,输出" ...

  9. 使用python解决一元二次方程

    python解一元二次方程 一元二次方程的公式 开始编程 一元二次方程的公式 一元二次方程的一般式为ax^2+bx+c=0(a不等于0) 一元二次方程的解法有几种,最简便的是公式法,即=b±根号b^2 ...

最新文章

  1. 快速了解Kubernetes微服务中的通信
  2. mysql中需要提交的操作_MySQL常用操作及基础知识
  3. Hbase Import导入数据异常处理-RetriesExhaustedWithDetailsException
  4. 分享一些自己的学习过程和学习方法
  5. php7++linux安装,安装PHP5和PHP7
  6. 框架 php_PHP四大主流框架的优缺点总结
  7. perl语言得到的txt文档只有表头_编程语言排行榜第一Python,为何频繁遭受开发者的嫌弃!...
  8. mysql怎么在查询_Mysql查询操作
  9. 自己做一个小项目python_【Python】第一个微信小项目
  10. Windows 11 中打印时提示打印机不兼容,都来是“+”惹的祸
  11. 家庭花卉养殖技巧及技术收集
  12. og协议-有利于SNS网站分享
  13. 【数据挖掘】关联规则之Galois Closure Based Approach(基于Galois闭包的方法)
  14. 惠普打印机驱动服务器系统安装教程,Hp打印机驱动怎么安装,详细图文版教程...
  15. 如何判断线性方程组是一个解还是无穷个解
  16. Vue+bpmn.js自定义流程图之palette(二)
  17. Java GC(垃圾回收)机制知识总结
  18. 网络模拟http数据包
  19. iPhone开发者必读:苹果iOS 6固件重点
  20. 第六周学习周记——学习JavaScript

热门文章

  1. You must restart adb and Eclipse处理方法(sjk_daemon.exe占用5037端口)
  2. 硬件电路设计之三极管和场效应管做开关管
  3. day01 pathon基础
  4. Error:..\FreeRTOS\queue.c,1088
  5. 深圳学校积分计算机,深圳市龙岗区小学积分入学排行榜
  6. 【Python爬虫实战】使用Selenium爬取QQ音乐歌曲及评论信息
  7. 大漠穷秋:如何快速构建一款SCRM小程序?
  8. 后面尾缀-T、-X、-TX…分别表示的意思
  9. 2022钉钉发布会|云钉低代码新模式、新能力、新机遇
  10. 你知道低代码BPM平台吗?