matrix.dot(inv(matrix))不等于恒等矩阵

时间:2019-11-30 14:36:11

标签: python matrix inverse

几个小时以来我一直遇到一个问题,我不明白为什么下面的V矩阵不等于Identity矩阵:

A = np.random.randint(50, size=(100, 2))
V = A.dot(A.T)
D = V.dot(inv(V))
D

我发现的结果如下:

array([[  3.26611328,   7.87890625,  14.1953125 , ...,   2.        ,
     -5.        , -24.        ],
   [ -5.91061401, -26.05834961,   5.30126953, ..., -10.        ,
      8.        , -16.        ],
   [ -2.64431763,   3.55639648,   3.10107422, ...,  -0.5       ,
     -5.        ,  -4.        ],
   ...,
   [ -2.62512207,  -7.78222656,  10.26367188, ...,  -6.        ,
     18.        ,   0.        ],
   [ -3.0625    ,  14.        ,  -4.        , ...,  -0.0625    ,
      0.        ,   8.        ],
   [  2.        ,  -7.        ,  16.        , ...,  -7.5       ,
     -8.        ,  -4.        ]])

谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

我发现了我的问题:

我试图找到det(matrix)= 0的矩阵的inv(),这就是微积分不正确的原因。

package com.example.newvibe;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;

import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDialogFragment;

public class AddBookDialogue extends AppCompatDialogFragment {
    private EditText editTextBookAuthor;
    private EditText editTextBookTitle;
    private EditText editTextBookCourse;
    private EditText editTextBookBarcode;
    private Spinner spinnerBookshelf;
    private AddBookDialogueListener listener;

    @Override
    public void onStart() {
        super.onStart();
        AlertDialog d = (AlertDialog)getDialog();
        if(d !=null){
            Button positiveButton = (Button) d.getButton(Dialog.BUTTON_POSITIVE);
            positiveButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String bookAuthor =  editTextBookAuthor.getText().toString();
                    String bookTitle =  editTextBookTitle.getText().toString();
                    String bookBarcode =  editTextBookBarcode.getText().toString();
                    String bookCourse =  editTextBookCourse.getText().toString();
                    String selectedBookshelf =  spinnerBookshelf.getSelectedItem().toString();
if(bookAuthor.isEmpty() || bookTitle.isEmpty() || bookBarcode.isEmpty() || bookCourse.isEmpty() ){
    Toast toast = Toast.makeText(getActivity(), "You didn't enter all the neccesary data", Toast.LENGTH_SHORT);
    toast.setGravity(Gravity.CENTER| Gravity.CENTER_HORIZONTAL, 0, 0);
    toast.show();

}else{
    if(bookBarcode.length()!=8){
        Toast toas =Toast.makeText(getActivity(), "Barcodes should be eight digits long", Toast.LENGTH_LONG);
        toas.setGravity(Gravity.CENTER| Gravity.CENTER_HORIZONTAL, 0, 0 );
        toas.show();
    }else{
        listener.getTexts(bookAuthor, bookTitle,bookBarcode,bookCourse,selectedBookshelf );
        dismiss();
    }
}
                }
            });
        }
        }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.dialogue_addbook, null);
        builder.setView(view)
                .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                })
                .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });


        editTextBookAuthor = view.findViewById(R.id.author);
        editTextBookTitle= view.findViewById(R.id.bookTitle);
        editTextBookBarcode= view.findViewById(R.id.bookBarcode);
        editTextBookCourse= view.findViewById(R.id.bookCourse);
        spinnerBookshelf= view.findViewById(R.id.spinnerBookshelf);
        ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(getActivity(), R.array.addBookBookshelfsAvailable, android.R.layout.simple_spinner_item);
        spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerBookshelf.setAdapter(spinnerAdapter);
        return builder.create();
    }

    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            listener = (AddBookDialogueListener) getTargetFragment();
        } catch(ClassCastException e){
            throw new ClassCastException(context.toString() + "no listener");
        }
    }
    public interface AddBookDialogueListener{
        void getTexts(String bookAuthor, String bookTitle, String bookBarcode, String bookCourse, String selectedBookshelf);

    }

然后我找到了身份矩阵

谢谢 哈比卜