質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1711閲覧

C++で前進代入、後退代入、gauss消去

yu3sukei22

総合スコア8

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/06/30 05:22

c++

1//メインのコード 2#include <stdio.h> 3#include <iostream> 4#include <math.h> 5#include "LinearAlgebra.hpp" 6 7int main(int argc,const char * argv[]){ 8 using namespace std; 9 vector<vector<double> > A(3,vector<double>(3));//行列Aの設定 10 A= {{3,-1,-1},{-1,3,-1},{-1,-1,3}}; 11 vector<double> b(3); 12 b= {1,1,1};//ベクトルbの設定 13 cout<<"A="<<endl; 14 printMatrix(A);//Aを表示 15 cout<<"b="<<endl; 16 printVector(b);//bを表示 17 vector<double> x(3); 18 x=GaussianElimination(A,b);//gauss消去 19 cout<<"x="<<endl; 20 printVector(x);//Ax=bの解を出力```ここに言語を入力 21 return 0; 22}

c++

1//関数ファイルLinearAlgebra.cpp 2#include "LinearAlgebra.hpp" 3#include <vector> 4#include <math.h> 5#include <iostream> 6using namespace::std; 7 8//ベクトルaを出力 9void printVector(vector<double> a){ 10 for(int i=0;i<a.size();i++){ 11 printf("%.2e\t",a[i]); 12 } 13 printf("\n"); 14} 15 16//行列Aを出力 17void printMatrix(vector<vector<double> > A){ 18 for(int i=0;i<A.size();i++){ 19 for(int j=0;j<A.size();j++){ 20 printf("%2e\t",A[i][j]); 21 } 22 printf("\n"); 23 } 24 printf("\n"); 25} 26//後退代入Ax=b 27vector<double> Backward_sub(vector<vector<double> > A,vector<double> b){ 28 int N=int(b.size()); 29 vector<double> x(N); 30 for(int k=N-1;k>=0;k--){ 31 float C=0; 32 for(int j=k+1;j<N;j++){ 33 C=A[k][j]*x[j]; 34 } 35 x[k]=(b[k]-C)/A[k][k]; 36 } 37 return x; 38} 39//gause消去 40vector<double> GaussianElimination(vector<vector<double> > a,vector<double> c){ 41 unsigned long N=c.size(); 42 vector<vector<double> > A(N,vector<double>(N)); 43 vector<double> b(N); 44 A=a; 45 b=c; 46 //前進消去 47 for(int k=0;k<N-1;k++){ 48 for (int i=k+1;i<=N;i++){ 49 int B=a[i][k]/a[k][k]; 50 for(int j=k+1;j<N;j++){ 51 A[i][j]=A[i][j]-A[i][k]*A[k][j]; 52 } 53 b[i]=b[i]-A[i][k]*b[k]; 54 } 55 } 56 cout<<"前進消去\n"; 57 cout<<"A="<<endl; 58 printMatrix(A); 59 cout<<"b="<<endl; 60 printVector(b); 61 //後退代入 62 cout<<"後退代入\n"; 63 vector<double> x(N); 64 x=Backward_sub(A,b); 65 return x; 66}

c++

1//ヘッダーファイル LinearAlgebra.hpp 2#ifndef LinearAlgebra_hpp 3#define LinearAlgebra_hpp 4 5#include <stdio.h> 6#include <vector> 7#include<math.h> 8using namespace::std; 9 10void printVector(vector<double>); 11void printMatrix(vector<vector<double> >); 12vector <double> VectorSubtract(vector <double>,vector <double>); 13vector <double> MatrixVector(vector<vector<double> >,vector <double>); 14vector <double> ResidualError(vector<vector <double> >,vector <double>,vector <double>); 15double VectorNorm1(vector <double>); 16double VectorNorm2(vector <double>); 17double VectorNormInfty(vector <double>); 18double MatrixNorm1(vector<vector <double> >); 19double MatrixNormIntfty(vector<vector <double> >); 20vector<double> GaussianElimination(vector<vector<double> > ,vector<double> ); 21vector<double> Backward_sub(vector<vector<double> > ,vector<double> ); 22 23#endif /* LinearAlgebra_hpp */

コードを全て記載しておきます。行列AとベクトルbのAx=bの解xを求めるコードを作っています。
出力するとエラーが出てしまい、そのエラーコードが
main.cpp:9:8: error: expected expression
A= {{3,-1,-1},{-1,3,-1},{-1,-1,3}};
^
main.cpp:11:8: error: expected expression
b= {1,1,1};
^
となってます。教授にも質問しましたが、おそらくLinearAlgebra.cppのどこかが間違っていると思われます。
どのように修正すればいいか教えてくれると幸いです.
使ってるのはXcodeのversion11.5です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コンパイルエラーは出ませんが、GaussianElimination()の以下の箇所でi3のときにa[i],A[i],b[i]が範囲外アクセスしていますよ。

C++

1 for (int i = k + 1; i <= N; i++) { 2 int B = a[i][k] / a[k][k]; 3 for (int j = k + 1; j < N; j++) { 4 A[i][j] = A[i][j] - A[i][k] * A[k][j]; 5 } 6 b[i] = b[i] - A[i][k] * b[k]; 7 }

投稿2020/06/30 12:21

編集2020/06/30 12:29
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

問題を再現できません。
Visual Studio 2019 でコンパイル/実行を確認しました。

A= 3.000000e+00 -1.000000e+00 -1.000000e+00 -1.000000e+00 3.000000e+00 -1.000000e+00 -1.000000e+00 -1.000000e+00 3.000000e+00 b= 1.00e+00 1.00e+00 1.00e+00

[追記]

教授にも質問しましたが、おそらくLinearAlgebra.cppのどこかが間違っていると思われます。

それが教授の返答だとしたら能無し教授だ。

投稿2020/06/30 05:44

編集2020/06/30 05:54
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問